Ich versuche, meiner aktuellen grafischen Benutzeroberfläche ein benutzerdefiniertes Dialogfeld hinzuzufügen, das vom Benutzer zum Einstellen einiger Parameter aufgerufen werden kann. Idealerweise würde ich gerne den benutzerdefinierten Dialog mit QtDesigner erstellen. Unten ist der Code, der von pyuic4
aus dem QtDesigner-UI-Code für das Dialogfeld.
from PyQt4 import QtCore, QtGui
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(508, 300)
self.buttonBox = QtGui.QDialogButtonBox(Dialog)
self.buttonBox.setGeometry(QtCore.QRect(150, 250, 341, 32))
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.label = QtGui.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(10, 120, 181, 31))
font = QtGui.QFont()
font.setPointSize(16)
self.label.setFont(font)
self.label.setObjectName("label")
self.sl_value = QtGui.QSlider(Dialog)
self.sl_value.setGeometry(QtCore.QRect(220, 120, 161, 31))
self.sl_value.setOrientation(QtCore.Qt.Horizontal)
self.sl_value.setObjectName("sl_value")
self.ed_value = QtGui.QLineEdit(Dialog)
self.ed_value.setGeometry(QtCore.QRect(400, 120, 41, 31))
font = QtGui.QFont()
font.setPointSize(16)
self.ed_value.setFont(font)
self.ed_value.setObjectName("ed_value")
self.retranslateUi(Dialog)
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), Dialog.accept)
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("rejected()"), Dialog.reject)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("Dialog", "Set example value:", None, QtGui.QApplication.UnicodeUTF8))
Dies wird gespeichert in Sub2.py
Dann füge ich in meiner Hauptpython-Datei Folgendes hinzu
from Sub2 import Ui_Dialog
Ich erstelle eine neue Klasse namens StartSub2
mit folgendem Code
class StartSub2(QtGui.QDialog):
def __init__(self,parent=None):
QtGui.QDialog.__init__(self,parent)
self.ui = Ui_Dialog
self.ui.setupUi(self)
Dann schließlich in meinem Haupt-GUI gibt es eine Funktion mit dem folgenden Code, die den Dialog starten sollte
def exampleSubGui(self):
dialog = StartSub2(self)
result = dialog.exec_()
Bitte beachten Sie, dass der Dialog noch nicht abgeschlossen ist. Sobald ich herausgefunden habe, wie ich ihn überhaupt starten kann, werde ich Signal-/Slot-Verbindungen für den Schieberegler und das Bearbeitungsfeld hinzufügen. Außerdem muss ich, wenn ich es richtig verstehe, die accept()
Methode, um die Eingaben des Benutzers zurückzugeben.
Das erste Problem, auf das ich stoße, ist das mit der __init__
Methode der StartSub2
. Ich erhalte den folgenden Fehler:
TypeError: unbound method setupUi() must be called with Ui_Dialog instance as
first argument (got StartSub2 instance instead)
Ich versuche, denselben Ansatz zu verfolgen wie die Haupt-GUI, die den folgenden Code verwendet
class StartQT4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
Aber dies ist keine Beschwerde über setupUi()
bekommen eine StartQT4
Instanz anstelle einer Ui_MainWindow
Instanz. Kann mir jemand erklären, wie ich das, was ich vorhabe, richtig machen kann? Oder kann mir jemand ein klares Beispiel oder eine Referenz nennen? Bitte lassen Sie es mich wissen, wenn Sie weitere Informationen oder Klarstellungen benötigen.