12 Stimmen

PyQt4: Erstellen eines benutzerdefinierten Dialogs, der Parameter zurückgibt

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X