PyQT实现多窗口切换的方法有哪些?
PyQT实现多窗口切换的方法有哪些?热爱Python开发的朋友快来和小编一起观看吧。
PyQT如何处理多窗口操作
我最近正在开发一个用PyQT编写的软件,当我意识到点击菜单栏时会弹出一个新窗口时,我陷入了困境。我发现使用WxPython的概念和方法几乎不可能实现。关于PyQT的中文资料很少。看了英文新闻和新的QT,总结了如何实现PyQT,终于搞定了。下面是一个小演示。
主界面代码如下:
# -*-coding: utf-8 -*-
from PyQt4 import QtCore,QtGui
fromdialog1importDialog12Dialog2
import sys
尝试:
_fromUtf8 = QtCore.QString.fromUtf8
除了AttributeError:
def _fromUtf8(s):8(s):
_编码= QtGui .QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
除了: ♷ 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.setObjectName(_fromUtf8("Form"))
Form.resize(400, 300)
self.form = Form
self.pushButton = QtGui.QPush
self.pushButton.setGeometry(QtCore.QRect(70, 90, 75, 23))
self.pushButton.setObjectName(_fromUtf8("pushButton")) =QButButton_2 )
self.pushButton_2.setGeometry( QtCore.QRect(240, 90, 75, 23))
self.pushButton_2.setObjectName(_fromUtf8("pushButton_2")
self.pushButton_2.setObjectName(_fromUtf8("pushButton_2")) QPushButton(格式)
self.pushButton_3.setGeometry(QtCore.QRect(150, 160, 75, 23))
self.pushButton_3.setObjectName(_fromUtf8("push") .QLabel(Form)
self.label .setGeometry (QtCore.QRect(170, 40, 54, 16))
self.label.setObjectName(_fromUtf8("label"))
self(.retranslateUi(.retranslateUi)表单)
QtCore.QMetaObject. connectSlotsByName(Form)
#令牌连接到指定槽位
self.pushbutton.click.connect (self.on_pushbutton_clickpuskton_2_Clushbutton_2_Clushbutton_3.clusked (self.on_pushbutton_3_CLICHBUTTON_3_CLICKE)
def retranslateui (自我表单):
Form.setWindowTitle(_translate("Form", "Form", None))
self.pushButton.setText(_translate("表单", "进入对话框1", 无))
self .pushButton_2.setText(_translate("表单", "进入对话框2", 无))
self.pushButton_3 .setText(_translate("表单", "退出", None))
self.label.setText( _translate("表单", "主表单", 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)♷
sys.exit( app.exec_())
pass
Dialog1界面代码如下:
# -*-coding: utf-8 -*-
from import PyQt4 QtCore, QtGui
尝试:
_fromUtf8 = QtCore.QString.fromUtf8
除了 AttributeError:
def _fromUtf8(s)::
_encoding = QtGui。 QApplication.Unicode UTF8
def _translate(context, text, disambig):
返回 QtGui.QApplication.translate(context, text, disambig, _encoding)
除了 AttributeError,text_translate:, disambig) :
return QtGui.QApplication.translate(context, text, disambig)
class Dialog1(QtGui.QWidget):
def setupUi(self, Dialog):
Dialog.set ("Dialog"))
Dialog.resize(400, 300)
self.form = Dialog
self.label = QtGui.QLabel(Dialogue)
self.label.setGeometry(QtCore.QRect(180, 50, 54, 12))
self.label.setObjectName(_fromUtf8("label")
self.dialog1_pushButton = QtGui.QPushButton self.dialog1_pushButton.setGeometry (QtCore.QRect(160, 130, 75, 23))
self.dialog1_pushButton.setObjectName(_fromUtf8("pushButton"))iCorretrans e. QMetaObject.connectSlotsByName(Dialog)
#令牌为连接到指定插槽
self.dialog1_pushButton.clicked.connect(self.on_dialog1_pushButton_clicked)
def retranslateUi):‗w. (_translate("对话框", "对话框", 无))
self.label.setText(_translate("对话框", "对话框1", 无))
self.dialog1_pushButton.setText(_translate("对话框") , "返回MainForm", 无))
def on_dialog1_pushButton_clicked(self):
self.form.close()
if __name__ == "__main__":
import systGu t. QApplication(sys.argv)
Dialog = QtGui.QDialog()
ui = Dialog1()
ui.setupUi(Dialog)
Dialog.show()
appsys.exit exec_() )
Dialog2接口代码如下:
[python] 查看简单版本
# -*-coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.UQString.f :
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context): .translate(context, text, disambiguation, _encoding)
except AttributeError:
def _translate(上下文,文本,消除歧义):
返回QtGui.QApplication.translate(上下文,文本,消除歧义)Dialog2(对象):
def setupUi(自身,对话框):
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.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
#信号连接到指定槽
self.pushButton.clicked.connect(self.on_pushButton_retranslate) 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(ui.setupUi(‷ Dialog.show ())
sys.exit(app.exec_())
按钮绑定新弹出界面的处理函数。使用的槽绑定方法为:
self .pushButton.clicked.connect( self.on_pushButton_clicked )
如果Menu项连接到新弹出界面的处理函数,应该使用的槽连接方法是:
QtCore.QObject.connect(self.set_value_menu, QtCore. SIGNAL(_fromUtf8("triggered()"), self.open_set_value_form)
两者使用的槽函数基本相同。如果第一个界面没有显示,则直接 hide() 第一个界面即可,如:
self.form.hide()
如果弹出新窗口时需要保留原来的窗口,则无需执行此步骤。在这种情况下,如果您希望选择第一个窗口作为顶部窗体,则在显示新窗口时应使用 show() :
Form1.show()
如果新窗口是固定顶部form ,覆盖原来的form,应该使用exec_():
Form1.exec_()
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。