Heim >Backend-Entwicklung >Python-Tutorial >PyQT implementiert Multi-Window-Switching
Dieser Artikel stellt hauptsächlich die Methode von PyQT zur Implementierung von Multi-Window-Switching vor. Er hat einen bestimmten Referenzwert.
Ich habe kürzlich eine Software erstellt und sie in PyQT geschrieben Ich steckte ernsthaft fest, als mir klar wurde, dass ein neues Fenster auftauchen würde, wenn ich auf die Menüleiste klicke, und ich stellte fest, dass es mit den Ideen und Methoden von WxPython völlig unmöglich war, dies zu tun. Es gibt wirklich zu wenig chinesische Informationen zu PyQT. Ich habe einige englische Informationen und QT-Informationen gelesen, die Implementierungsmethode von PyQT umgekehrt und es schließlich verstanden. Unten finden Sie eine kleine Demo.
Der Code der Hauptschnittstelle lautet wie folgt:
# -*- coding: utf-8 -*- from PyQt4 import QtCore, QtGui from dialog1 import Dialog1 from dialog2 import Dialog2 import sys try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: def _fromUtf8(s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) class MainWindow(QtGui.QWidget): dialog1_signal = QtCore.pyqtSignal() #定义一个无参数的信号,串口设定与子站初始化信号 dialog2_signal = QtCore.pyqtSignal() #定义一个无参数的信号,串口设定与子站初始化信号 exit_signal = QtCore.pyqtSignal() #定义一个无参数的信号,串口设定与子站初始化信号 def __init__(self): super(MainWindow,self).__init__() def setupUi(self, Form): Form.setObjectName(_fromUtf8("Form")) Form.resize(400, 300) self.form = Form self.pushButton = QtGui.QPushButton(Form) self.pushButton.setGeometry(QtCore.QRect(70, 90, 75, 23)) self.pushButton.setObjectName(_fromUtf8("pushButton")) self.pushButton_2 = QtGui.QPushButton(Form) self.pushButton_2.setGeometry(QtCore.QRect(240, 90, 75, 23)) self.pushButton_2.setObjectName(_fromUtf8("pushButton_2")) self.pushButton_3 = QtGui.QPushButton(Form) self.pushButton_3.setGeometry(QtCore.QRect(150, 160, 75, 23)) self.pushButton_3.setObjectName(_fromUtf8("pushButton_3")) self.label = QtGui.QLabel(Form) self.label.setGeometry(QtCore.QRect(170, 40, 54, 16)) self.label.setObjectName(_fromUtf8("label")) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) #信号连接到指定槽 self.pushButton.clicked.connect(self.on_pushButton_clicked) self.pushButton_2.clicked.connect(self.on_pushButton_2_clicked) self.pushButton_3.clicked.connect(self.on_pushButton_3_clicked) def retranslateUi(self, Form): Form.setWindowTitle(_translate("Form", "Form", None)) self.pushButton.setText(_translate("Form", "进入dialog1", None)) self.pushButton_2.setText(_translate("Form", "进入dialog2", None)) self.pushButton_3.setText(_translate("Form", "退出", None)) self.label.setText(_translate("Form", "主窗体", None)) def on_pushButton_clicked(self): self.form.hide() Form1 = QtGui.QDialog() ui = Dialog1() ui.setupUi(Form1) Form1.show() Form1.exec_() self.form.show() def on_pushButton_3_clicked(self, Form): #QtCore.QObject.connect( self.pushButton_3, QtCore.SIGNAL("clicked()"), self, QtCore.SLOT(quit())) #也可以这样 self.form.close() def on_pushButton_2_clicked(self): self.form.close() Form1 = QtGui.QDialog() ui = Dialog2() ui.setupUi(Form1) Form1.show() Form1.exec_() self.form.show() if __name__ == '__main__': app = QtGui.QApplication(sys.argv) Form = QtGui.QWidget() window = MainWindow() window.setupUi(Form) Form.show() sys.exit(app.exec_()) pass
Der Code der Dialog1-Schnittstelle lautet wie folgt:
# -*- coding: utf-8 -*- from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: def _fromUtf8(s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) class Dialog1(QtGui.QWidget): def setupUi(self, Dialog): Dialog.setObjectName(_fromUtf8("Dialog")) Dialog.resize(400, 300) self.form = Dialog self.label = QtGui.QLabel(Dialog) self.label.setGeometry(QtCore.QRect(180, 50, 54, 12)) self.label.setObjectName(_fromUtf8("label")) self.dialog1_pushButton = QtGui.QPushButton(Dialog) self.dialog1_pushButton.setGeometry(QtCore.QRect(160, 130, 75, 23)) self.dialog1_pushButton.setObjectName(_fromUtf8("pushButton")) self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) #信号连接到指定槽 self.dialog1_pushButton.clicked.connect(self.on_dialog1_pushButton_clicked) def retranslateUi(self, Dialog): Dialog.setWindowTitle(_translate("Dialog", "Dialog", None)) self.label.setText(_translate("Dialog", "dialog1", None)) self.dialog1_pushButton.setText(_translate("Dialog", "返回主窗体", None)) def on_dialog1_pushButton_clicked(self): self.form.close() if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) Dialog = QtGui.QDialog() ui = Dialog1() ui.setupUi(Dialog) Dialog.show() sys.exit(app.exec_()) Dialog2界面的代码如下: [python] view plain copy # -*- coding: utf-8 -*- from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: def _fromUtf8(s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) class Dialog2(object): def setupUi(self, Dialog): Dialog.setObjectName(_fromUtf8("Dialog")) Dialog.resize(400, 300) self.form = Dialog self.label = QtGui.QLabel(Dialog) self.label.setGeometry(QtCore.QRect(180, 60, 54, 12)) self.label.setObjectName(_fromUtf8("label")) self.pushButton = QtGui.QPushButton(Dialog) self.pushButton.setGeometry(QtCore.QRect(160, 140, 75, 23)) self.pushButton.setObjectName(_fromUtf8("pushButton")) self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) #信号连接到指定槽 self.pushButton.clicked.connect(self.on_pushButton_clicked) def retranslateUi(self, Dialog): Dialog.setWindowTitle(_translate("Dialog", "Dialog", None)) self.label.setText(_translate("Dialog", "dialog2", None)) self.pushButton.setText(_translate("Dialog", "返回主窗体", None)) def on_pushButton_clicked(self): self.form .close() if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) Dialog = QtGui.QDialog() ui = Dialog2() ui.setupUi(Dialog) Dialog.show() sys.exit(app.exec_())
Die Schaltfläche ist an die Verarbeitungsfunktion des neuen Pop-ups gebunden. up-Schnittstelle und die verwendete Steckplatzverbindungsmethode ist:
self.pushButton.clicked.connect(self.on_pushButton_clicked)
Wenn das Menü Das Element ist an die Verarbeitungsfunktion der neuen Popup-Schnittstelle gebunden. Die zu verwendende Slot-Verbindungsmethode lautet:
QtCore.QObject.connect(self.set_value_menu, QtCore.SIGNAL(_fromUtf8("triggered()")), self.open_set_value_form)
Die von den beiden verwendeten Slot-Verarbeitungsfunktionen sind grundsätzlich gleich.
Wenn die ursprüngliche Schnittstelle nicht angezeigt wird, verstecken() Sie einfach die ursprüngliche Schnittstelle, z. B.:
self.form.hide()
Wenn Wenn Sie das Originalfenster beim Öffnen eines neuen Fensters sichtbar halten möchten, ist dieser Schritt nicht erforderlich. Und wenn Sie in diesem Fall möchten, dass das ursprüngliche Fenster als Formular der obersten Ebene ausgewählt wird, sollten Sie show() verwenden, wenn Sie das neue Fenster anzeigen:
Form1.show()
Wenn das neue Fenster ein festes Formular der obersten Ebene ist und das ursprüngliche Formular abgedeckt ist, sollte exec_() verwendet werden:
Form1.exec_()
Verwandte Empfehlungen:
PyQt implementiert den Schnittstellen-Flip-Switching-Effekt
Das obige ist der detaillierte Inhalt vonPyQT implementiert Multi-Window-Switching. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!