Code前端首页关于Code前端联系我们

PyQT实现多窗口切换的方法有哪些?

terry 2年前 (2023-09-25) 阅读数 49 #后端开发

PyQT实现多窗口切换的方法有哪些?热爱Python开发的朋友快来和小编一起观看吧。

PyQT实现多窗口切换的方法有哪些?

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前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门