Tabwidget ta yeni bir tab açma

Merhabalar,

Nasıl arayacağımı, nasıl anlatacağımı da bilemedim. O yüzden en sonunda konu açmaya karar verdim. O yüzden mazur görünüz.

Qt designer ile bir mainwindow oluşturdum. Bir tabwidget ve bir menü var. Qt designer ile ayrıca bir widget oluşturdum. Menüden seçim yaptığımda tabwidget yeni bir tab oluşturup widget ı da burada görüntülemek istiyorum.

Yardımcı olur musunuz?

QTabWidget::addTab calismiyor mu?

Esasen yapmak istediğim şu: Ana ekrandaki menüde çift tıklama ile sağdaki tabwidgetta o menüye ekranı getirmeye çalışıyorum. Ekran görüntüleri ve kodlar aşağıdadır. addtab ile aldığım hatayı da ekledim.

mainwindow
create_customer

# main.py
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QLabel
from mainwindow import Ui_MainWindow
from create_customer import Ui_add_customer   


class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        
        # actionMenu operations
        self.ui.actionMenu.setChecked(True)  # set checked
        self.ui.actionMenu.triggered.connect(self.actionMenuHide)
        
        
        # treewidget operations
        self.ui.treeWidget.doubleClicked.connect(self.createNewTab)

        
    
    # actionMenu method to show/hide if check or uncheck
    def actionMenuHide(self):
        if self.ui.actionMenu.isChecked() == True:
            self.ui.treeWidget.setVisible(True)
        elif self.ui.actionMenu.isChecked() == False:
            self.ui.treeWidget.setVisible(False)
        

    def createNewTab(self):
        # get the menu text
        getSelected = self.ui.treeWidget.selectedItems()
        if getSelected:
            baseNode = getSelected[0]
            menuText = baseNode.text(0)

        # create a new tab with menu text
        if menuText == 'Add Customer':
            self.newTab = Ui_add_customer()
        
        self.ui.tabWidget.addTab(self.newTab, menuText)



if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    sys.exit(app.exec())

Hata kodu:

Traceback (most recent call last):
  File "c:\Users\Okan\Desktop\Python\Projects\Open MTS\main.py", line 46, in createNewTab
    self.ui.tabWidget.addTab(self.newTab, menuText)
TypeError: arguments did not match any overloaded call:
  addTab(self, widget: Optional[QWidget], a1: Optional[str]): argument 1 has unexpected type 'Ui_add_customer'
  addTab(self, widget: Optional[QWidget], icon: QIcon, label: Optional[str]): argument 1 has unexpected type 'Ui_add_customer'

Kendi çözümümü ekleyeyim. Başka öneriniz varsa bilgilendirirseniz sevinirim. Qt Designer ile oluşturup python dosyasına dönüştürdüğümüzde gelen class özelliklerini değiştirdim.

Bu iken

class Ui_Form(object):
    def setupUi(self, Form):

init metodunu ve super i ekleyerek hallettim. Bu kısımlara hiç odaklanmamıştım.

class Ui_Form(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Ui_Form, self).__init__(parent)

Qt Designer’in girdisini/ciktisini goremiyorum tabi, ama formun parent’ini QWidget yapmanin bir yolu mutlaka vardir. (Hatta yaratilan her sey default QWidget degil mi?)

Olmadi araya ucuncu bir obje (QWidget) da sikistirilabilir; simdi tam nasil yapilacagini cozemedim. (parent olarak self verilmesi kafami karistirmis olabilir.)

Dediğim gibi şimdilik böyle bir çözüm ürettim. Qt designer ile her değişiklik yapıp pyuic ile py dosyasına dönüştürdüğümde bu düzenlemeyi tekrar yapmam gerekiyor. O yüzden başka bir öneriniz varsa çok iyi olur.