摘要:
在前面的学习中,我们都是围绕着一个窗口展开,那么,在这篇文章里面,我们会介绍怎么一次使用多个窗口。
比如说,点击某个按键后弹出一个全新的窗口。很常见的就是一个场景就是,点击退出的时候,弹出一个窗口询问 确认是否退出。效果如下:
1.窗口一的实现:
步骤1:
新建一个widget(子窗口)。
步骤2:
大力的拽进来一个最普通的按键pushButton(当然其他按键也可以)
步骤3:
给按键编辑信号/槽,将按键触发信号选为点击,另外槽的名字为sure()
保存名为 test_1.ui
步骤4:
将.ui文件生成.py文件。
至此完成一个窗口的程序编写。
2.窗口二的实现:
步骤1:
这次,我们选择新建一个Dialog without Buttons 。(当然,你想选择再新建一个widget也没问题)
不选择带按键的原因请看本文最后。
步骤2:
拽进来一个label,其具体位置在Display Widgets中。
然后双击label里面的内容,改成你喜欢的文字。
注意:改变字体的是在对象属性中的QWidget->font->点大小中。
步骤3:
同样地,编辑信号/槽。具体如下:
保存文件为test_2.ui
3.主程序的编写
经过上面两步,两个窗口已经完成了。
现在轮到最后一部主程序的编写,这次主程序会相对之前复杂一点。具体来说下(其实就是多了一个类)
from PyQt5 import QtWidgets from test_1 import Ui_Form from test_2 import Ui_Dialog class MyWindow(QtWidgets.QWidget,Ui_Form): def __init__(self): super(MyWindow,self).__init__() self.setupUi(self) self.child_dialog=MyDialog(self) def sure(self): self.child_dialog.show() class MyDialog(QtWidgets.QDialog,Ui_Dialog): def __init__(self,last_form): super(MyDialog,self).__init__() self.setupUi(self) self.last_form=last_form def yes(self): self.close() self.last_form.close() def no(self): self.close() if __name__=="__main__": import sys app=QtWidgets.QApplication(sys.argv) myshow=MyWindow() myshow.show() sys.exit(app.exec_())
下面详细分析:
from test_1 import Ui_Form from test_2 import Ui_Dialog
将两个窗口的类导入。
------------------------------------下面分析第一个类------------------------------------------
class MyWindow(QtWidgets.QWidget,Ui_Form): def __init__(self): super(MyWindow,self).__init__() self.setupUi(self) self.child_dialog=MyDialog(self) def sure(self): self.child_dialog.show()
创建第一个窗口(Form)的类。
注意到在初始化的时候多了一句以往没有的
self.child_dialog=MyDialog(self)
这一句的作用其实就是创建一个Dialog的子窗口。
其中self.child_dialog就是第二个窗口的实例对象。
def sure(self): self.child_dialog.show()
这个是按下按键 退出时触发的函数,其行为具体是将第二个窗口进行显示。
------------------------------------下面分析第二个类------------------------------------------
class MyDialog(QtWidgets.QDialog,Ui_Dialog): def __init__(self,last_form): super(MyDialog,self).__init__() self.setupUi(self) self.last_form=last_form def yes(self): self.close() self.last_form.close() def no(self): self.close()
这个是创建第二个窗口(Dialog)的类。
在初始化时,与以往不同的是多了一句:
self.last_form=last_form
而且,初始化时多了一个参数last_form,这个就是第一个窗口。意思就是第二个窗口和第一个窗口进行连接。
def yes(self): self.close() self.last_form.close()
按下 真的按键时,两个窗口都关闭。
def no(self): self.close()
按下 假的按键时,只关闭第二个窗口。
至此,我们完成了显示多个窗口的任务。其实本文虽然是展示2个窗口,但是只要在“主”窗口中的初始化中加入更多窗口的实例化就可以实现多个窗口的功能。