博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pyQt不同窗体间的值传递(一)——对话框关闭时返回值给主窗口
阅读量:4056 次
发布时间:2019-05-25

本文共 3391 字,大约阅读时间需要 11 分钟。

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

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

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

自定义对话框类如下:
# -*- coding: utf-8 -*-    
"""
Created on Wed Jul 15 16:18:59 2015
 
@author: Administrator
"""
from PyQt4.QtCore import *
from PyQt4.QtGui import *
 
class DateDialog(QDialog):
def __init__(self, parent = None):
super(DateDialog, self).__init__(parent)
 
layout = QVBoxLayout(self)
 
# nice widget for editing the date
self.datetime = QDateTimeEdit(self)
self.datetime.setCalendarPopup(True)
self.datetime.setDateTime(QDateTime.currentDateTime())
layout.addWidget(self.datetime)
 
# OK and Cancel buttons
buttons = QDialogButtonBox(
QDialogButtonBox.Ok | QDialogButtonBox.Cancel,
Qt.Horizontal, self)
buttons.accepted.connect(self.accept)
buttons.rejected.connect(self.reject)
layout.addWidget(buttons)
 
# get current date and time from the dialog
def dateTime(self):
return self.datetime.dateTime()
 
# static method to create the dialog and return (date, time, accepted)
@staticmethod
def getDateTime(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()
print date.date(),date.time(),result
dialog.destroy()
或者,根据对话框返回点击确认还是取消来进行下一步操作。
dialog = DateDialog(self)     
if dialog.exec_():
date = dialog.dateTime()
print date.date(),date.time(),result
dialog.destroy()
可以看出,这两种方法的本质是一样的,都是实例化对话框类,调用该对话框的函数获取需要的值,而使用静态函数方法只是将这些过程进行的封装。

转载地址:http://wrhci.baihongyu.com/

你可能感兴趣的文章
【设计模式】学习笔记13:组合模式(Composite)
查看>>
hdu 1011 Starship Troopers (树形背包dp)
查看>>
hdu 1561 The more, The Better (树形背包dp)
查看>>
【设计模式】学习笔记14:状态模式(State)
查看>>
poj 1976 A Mini Locomotive (dp 二维01背包)
查看>>
斯坦福大学机器学习——因子分析(Factor analysis)
查看>>
项目导入时报错:The import javax.servlet.http.HttpServletRequest cannot be resolved
查看>>
linux对于没有写权限的文件如何保存退出vim
查看>>
Windows下安装ElasticSearch6.3.1以及ElasticSearch6.3.1的Head插件
查看>>
IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
查看>>
【IntelliJ IDEA】idea导入项目只显示项目中的文件,不显示项目结构
查看>>
ssh 如何方便的切换到其他节点??
查看>>
JSP中文乱码总结
查看>>
Java-IO-File类
查看>>
Java-IO-java的IO流
查看>>
Java-IO-输入/输出流体系
查看>>
Java实现DES加密解密
查看>>
HTML基础
查看>>
Java IO
查看>>
Java NIO
查看>>