在PyQt编程过程中,经常会遇到输入或选择多个参数的问题,把多个参数写到一个窗口中,主窗口会显得很臃肿,所以,今天我们来学习一下界面多窗口的转换。
在前面的学习中,我们对PyQt的Qt Designer有了基本的学习,并且结合推文内容制作了单窗口的界面程序,如猜谜游戏,计算器等单界面程序。将所学的知识由理论走向了实际,并进行了融汇贯通。
今天的推文里,我们来介绍一个实现多窗口界面以及主窗口和子窗口之间的数值传递的程序。
效果图:
关于程序多窗口的实现,一般是添加一个按钮,调用一个子界面对话框,在对话框中进行参数的选择,关闭对话框并将参数返回给主窗口。
开发工具准备
1.Pycharm 2019.1.3社区版
2.Anaconda(Python 3.6.0,PyQt5)
开发流程
1
因为之前开发程序时候都用了Qt designer,太依赖于Qt designer进行GUI设计,所以本次开发程序时,就采用代码形式进行控件布局,当然这得提前构思好主界面和子界面的控件。
本次程序设计的内容是在主界面打开子界面之后,可以将子界面里面设置的时间返回至主界面。
根据程序设计的内容进行主界面和子界面的设计。
主界面设计如下:
这里的主界面采用的是QWidget,没有菜单栏,除此而外界面较为简单,分别由一个Line edit控件,两个Push button控件从上到下进行垂直布局构成。
相应代码为:
boxLayout= QVBoxLayout(self)
boxLayout.addWidget(self.lineEdit)
boxLayout.addWidget(self.button1)
boxLayout.addWidget(self.button2)
子界面设计如下:
相应代码为:
layout=QVBoxLayout(self)
self.datetime=QDateTimeEdit(self)
self.datetime.setCalendarPopup(True)
self.datetime.setDateTime(QDateTime.currentDateTime())
layout.addWidget(self.datetime)
buttons=QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel,Qt.Horizontal,self)
buttons.accepted.connect(self.accept)
buttons.rejected.connect(self.reject)
layout.addWidget(buttons)
子界面里面用到的是一个Datetime edit控件,一个日期选择控件,以及确认和取消这对按钮控件。
2
编写对应的子界面的函数:
@staticmethod
def getDateTime(parent=None):
dialog=DateDialog(parent)
result=dialog.exec_()
date=dialog.dateTime()
return (date.date(),date.time(),result==QDialog.Accepted)
编写对应的主界面槽函数:
def onButton1Clicked( self ):
dialog=DateDialog(self)
result=dialog.exec_()
date=dialog.dateTime()
self.lineEdit.setText(date.date().toString())
print('\n日期对话框的返回值')
print('date=%s'%str(date.date))
print('time=%s'%str(date.time()))
print('result=%s'%result)
连接主界面的信号和槽函数:
self.lineEdit=QLineEdit(self)
self.button1=QPushButton('弹出对话框1')
self.button1.clicked.connect(self.onButton1Clicked)
self.button2=QPushButton('弹出对话框2')
self.button2.clicked.connect(self.onButton2Clicked)
3
整个程序运行起来如下所示:
以上就是今天介绍的多窗口小程序的设计流程
END