当我们通过pyqt开发时,eric6为我们提供了一个方便的工具:图形化的绘制UI工具--qt designer。
我们可以通过它开发多个UI,然后利用信号-槽工具,将功能代码附着在上面。也可以将多个界面连接起来。
接下来,我要提供将多个UI链接起来的思路。
一:讲解:qt designer 自动生成的代码是怎样运行的:
(一)组成
qt desinger自动生成的代码为一个对象和对象启动命令,对象中包含两个函数,setupUi()和retranslateUi()。
形如这样:
from ... import ....
class someclassname(object):
def setupUi():
...
def retranslateUi():
...
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
(二)运行方式:
(1)两个函数setupUI和retranslateUi负责绘制Ui,其中setupUI会调用retranslateUi。
(2)if __name__ = "__main__" 及以后的语句是python的主程序运行
app = QtWidgets.QApplication(sys.argv)
......
sys.exit(app.exec_())
上面两句为pyqt主程序运行通用语句
(3)
Dialog = QtWidgets.QDialog() # 获取窗口类型实例
ui = someclassname() # 取得ui的class实例
ui.setupUi(Dialog) # 将ui实例绘制到窗口实例上
(4)
Dialog.show() # 展示窗口
二:如何组合窗口
(一)首先,建立一个主程序的python文件,然后各种import
(1)基本引用
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
(2)文件引用:引用各个Ui的py文件的class
(二)实例化启动qt应用
app = QtWidgets.QApplication(sys.argv)
(三)实例化各种窗口,方式如1.2.3 中的三个语句,例如:
!!!!注意,修改对应相关ui的py文件的变量名函数名避免冲突!!!!!!!
(1)主窗口
ChenSpider = QtWidgets.QMainWindow()
ui = Ui_ChenSpider()
ui.setupUi(ChenSpider)
(2)弹出窗口1
Dialog = QtWidgets.QDialog()
ui2 = Ui_Dialog()
ui2.setupUi2(Dialog)
(3)弹出窗口2
Dialog3 = QtWidgets.QDialog()
ui3 = Ui_Dialog3()
ui3.setupUi3(Dialog3)
(四) 将弹出窗口绑定在主窗口某个按钮上
例子中,将主窗口chenSpider的loginmysqlbttn按钮绑定在窗口1上,aboutbttn绑定在窗口2上,点击弹出
bttn = ui.loginmysqlbttn
bttn.clicked.connect(Dialog.show)
bttn2 = ui.aboutbttn
bttn2.clicked.connect(Dialog3.show)
(五) 启动
if __name__ == "__main__":
ChenSpider.show()
sys.exit(app.exec_())
三:示例代码:
原来的代码已经失效,参考我的github小工具的关于按钮吧。
https://github.com/chenyansu/ChenSpiderGUI