pyQt不同窗体间的值传递(一)——对话框关闭时返回值给主窗口
2015-07-15 20:36
1086 查看
在写pyQt时,经常会遇到输入或选择多个参数的问题,把它写到一个窗体中,会显得主窗体很臃肿。所以一般是添加一个按钮,调用对话框,将这些参数选择放入弹出的对话框中,关闭对话框时将参数值返回给主窗体。
pyQT中提供一些标准的对话框类,可以用于输入数据,修改数据,更改应用的设置等等,如常见的QFileDialog、QInputDialog、QColorDialog、QFontDialog等。具体的使用例子可以参考:
http://www.cppblog.com/mirguest/archive/2012/02/12/165386.html
另外,也可以自定义对话框,通过在自定义对话框类中实现静态函数来传值。先来个例子:
自定义对话框类如下:
主要注意几点:
1、使用两个button(ok和cancel)分别连接accept()和reject()槽函数。
2、实现一个静态函数,将参数通过该函数传出。
3、在静态函数中实例化该类,并调用.exec_()函数来显示执行这个对话框。
4、通过.exec_()的返回值来判断用户点的是ok还是cancel按钮,进而做出下一步判断。
在主窗口中调用静态函数方法,就可以得到传递的参数值,代码如下:
第二种方法,直接在主窗口程序中实例化该对话框,然后调用该对话框的函数来获取返回值。同样对于上面的DateDialog,在主程序中的代码如下:
或者,根据对话框返回点击确认还是取消来进行下一步操作。
可以看出,这两种方法的本质是一样的,都是实例化对话框类,调用该对话框的函数获取需要的值,而使用静态函数方法只是将这些过程进行的封装。
pyQT中提供一些标准的对话框类,可以用于输入数据,修改数据,更改应用的设置等等,如常见的QFileDialog、QInputDialog、QColorDialog、QFontDialog等。具体的使用例子可以参考:
另外,也可以自定义对话框,通过在自定义对话框类中实现静态函数来传值。先来个例子:
自定义对话框类如下:
#-*-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()
可以看出,这两种方法的本质是一样的,都是实例化对话框类,调用该对话框的函数获取需要的值,而使用静态函数方法只是将这些过程进行的封装。
相关文章推荐
- QT国际化动态语言切换的实现(原创) (2012-02-20 11:23:20)
- Qt之自定义菜单(按钮菜单)
- 移植Qt-5.5.0到ARM Cortex-A8
- 关于QT利用setStyleSheet为主控件添加背景图片,而不影响其子控件的背景设置
- Qt 的事件过滤器
- Qt 的事件过滤器
- VS2013 Qt5显示中文字符
- QT进程间通信详细介绍及QProcess机制分析
- 表格对象QTableWidget相关常见方法
- QT编程,如何使对话框总是最优化
- Qt删除所有空格/空白符
- MFC、WTL、WPF、wxWidgets、Qt、GTK 各有什么特点
- 简单QT应用了可实现手动布局QT应用
- QT designer中找不到setshown
- QT 下OpenCV显示图片
- Qt 5.5.0 Windows环境搭建
- Qt画银白色Macbook
- Qt4-5学习杂谈
- qt实现重新登录
- 解析Qt中QThread使用方法