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.
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.
# 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.