您的位置:首页 > 编程语言 > Qt开发

pyQt不同窗体间的值传递(一)——对话框关闭时返回值给主窗口

2015-07-15 20:36 1086 查看
在写pyQt时,经常会遇到输入或选择多个参数的问题,把它写到一个窗体中,会显得主窗体很臃肿。所以一般是添加一个按钮,调用对话框,将这些参数选择放入弹出的对话框中,关闭对话框时将参数值返回给主窗体。

pyQT中提供一些标准的对话框类,可以用于输入数据,修改数据,更改应用的设置等等,如常见的QFileDialog、QInputDialog、QColorDialog、QFontDialog等。具体的使用例子可以参考:

http://www.cppblog.com/mirguest/archive/2012/02/12/165386.html

另外,也可以自定义对话框,通过在自定义对话框类中实现静态函数来传值。先来个例子:

自定义对话框类如下:

#-*-coding:utf-8-*-
"""
CreatedonWedJul1516:18:592015
@author:Administrator
"""
fromPyQt4.QtCoreimport*
fromPyQt4.QtGuiimport*
classDateDialog(QDialog):
def__init__(self,parent=None):
super(DateDialog,self).__init__(parent)
layout=QVBoxLayout(self)
#nicewidgetforeditingthedate
self.datetime=QDateTimeEdit(self)
self.datetime.setCalendarPopup(True)
self.datetime.setDateTime(QDateTime.currentDateTime())
layout.addWidget(self.datetime)
#OKandCancelbuttons
buttons=QDialogButtonBox(
QDialogButtonBox.Ok|QDialogButtonBox.Cancel,
Qt.Horizontal,self)
buttons.accepted.connect(self.accept)
buttons.rejected.connect(self.reject)
layout.addWidget(buttons)
#getcurrentdateandtimefromthedialog
defdateTime(self):
returnself.datetime.dateTime()
#staticmethodtocreatethedialogandreturn(date,time,accepted)
@staticmethod
defgetDateTime(parent=None):
dialog=DateDialog(parent)
result=dialog.exec_()
date=dialog.dateTime()
return(date.date(),date.time(),result==QDialog.Accepted)


主要注意几点:

1、使用两个button(ok和cancel)分别连接accept()和reject()槽函数。

2、实现一个静态函数,将参数通过该函数传出。

3、在静态函数中实例化该类,并调用.exec_()函数来显示执行这个对话框。

4、通过.exec_()的返回值来判断用户点的是ok还是cancel按钮,进而做出下一步判断。

在主窗口中调用静态函数方法,就可以得到传递的参数值,代码如下:

date,time,ok=DateDialog.getDateTime()


第二种方法,直接在主窗口程序中实例化该对话框,然后调用该对话框的函数来获取返回值。同样对于上面的DateDialog,在主程序中的代码如下:

dialog=DateDialog(self)
result=dialog.exec_()
date=dialog.dateTime()
printdate.date(),date.time(),result
dialog.destroy()


或者,根据对话框返回点击确认还是取消来进行下一步操作。

dialog=DateDialog(self)
ifdialog.exec_():
date=dialog.dateTime()
printdate.date(),date.time(),result
dialog.destroy()


可以看出,这两种方法的本质是一样的,都是实例化对话框类,调用该对话框的函数获取需要的值,而使用静态函数方法只是将这些过程进行的封装。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: