在写pyQt时,经常会遇到输入或选择多个参数的问题,把它写到一个窗体中,会显得主窗体很臃肿。所以一般是添加一个按钮,调用对话框,将这些参数选择放入弹出的对话框中,关闭对话框时将参数值返回给主窗体。
pyQT中提供一些标准的对话框类,可以用于输入数据,修改数据,更改应用的设置等等,如常见的QFileDialog、QInputDialog、QColorDialog、QFontDialog等。具体的使用例子可以参考:
http://www.cppblog.com/mirguest/archive/2012/02/12/165386.html
另外,也可以自定义对话框,通过在自定义对话框类中实现静态函数来传值。先来个例子:
# -*- 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()
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()