'''
定义一个"dump"的对话框,该对话框的widget通过对话框的调用者设置为初始对象值,
对话框的最终值再次通过对话框的调用者直接从widget中获得。
一个dump的对话框不知道把它的小部件用于呈现和编辑哪些数据。
但是,也可以应用一些基本的验证在一个dump对话框widget上,
但是设置包含widget之间相互依赖关系的验证并不常见(或总是可能)。
换句话说,form-level验证通常不在dump对话框中使用。
dump对话通常是带有一个“accept(或者OK)”和一个"reject(或者Cancel)"按钮的对话窗口。
使用dump对话的主要优点是不必编写任何代码来为对话提供一个API,也不用编写任何附加逻辑的代码。
这些好处都是公开访问所有小部件的结果。主要的缺点是使用它们的代码与用户界面(直接访问窗口小部件)紧紧相关,
所以无法轻松实现复杂的验证 - 它们比标准方便得多或智能对话框,如果需要在多个地方。
下面给出一个实例用来说明:
该对话是一个用户设置一些笔属性,例如笔的宽度、样式、是否斜边。
该对话框包含的widget:三个水平框、有一个垂直框、整数范围调节器、复选框、下拉框、按钮框。
在PyQt 4.1提供一个Button对话框组件:QDialogButtonBox类。
通过该类可以创建OK和Cancel按钮。例如:
buttonBox=QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
当用户按Enter时,默认按钮被按下,默认按钮设置方式如下:
buttonBox.button(QDialogButtonBox.Ok).setDefault(True)
一个QDialogButtonBox单个widget,所以可以直接添加到存在的layout中。
下面给出一个添加到网格布局容器的实例代码:
gridLayout.addWidget(buttonBox,3,0,1,3) #在三行一列,行跨度为1,列跨度为3
QDialogButtonBox有自己的按钮信号,连接操代码如下:
self.connect(buttonBox, SIGNAL("accepted()"),self, SLOT("accept()")) #确认或者OK按钮
self.connect(buttonBox, SIGNAL("rejected()"),self, SLOT("reject()"))#取消或者Cancel按钮
QDialogButtonBox默认使用水平布局,但是可以传递Qt.Vertical到它的构造函数设置为垂直布局,
或者调用setOrientation()函数
'''
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class dumpDialog(QDialog):
def __init__(self,parent=None):
super(dumpDialog,self).__init__(parent)
qvbLayout=QVBoxLayout()
whbLayout=QHBoxLayout()
shbLayout=QHBoxLayout()
btnhbLayout=QHBoxLayout()
'''
当在标签的文本中加上&符号(&)时,
它可以有两个可能的含义。
它可以只是一个文字和号。
或者它可以表示不应该显示&符号,
而是应该加下划线,以表示它代表键盘加速器(快捷键)。
如何在一个文字符号与一个加字符进行区分呢?如果label有一个buddy,
则这个符号表示键盘加速器(快捷键)。
一个buddy是一个widget, 当label相关的键盘快捷键被按下时,
pyqt传递键盘焦点到该widget。
快捷键是:Alt+名字开头字母
'''
wlabel=QLabel("&Width:")
self.wspinbox=QSpinBox()
self.wspinbox.setRange(1,25)
self.wspinbox.setValue(5)
wlabel.setBuddy(self.wspinbox)
bcheck=QCheckBox("&Beveled edges")
bcheck.setChecked(True)
styleLabel=QLabel("&Style:")
self.styleQcombox=QComboBox()
self.styleQcombox.addItems(["Solid", "Dashed", "Dotted","DashDotted", "DashDotDotted"])
styleLabel.setBuddy(self.styleQcombox)
buttonBox=QDialogButtonBox(QDialogButtonBox.Ok| QDialogButtonBox.Cancel)
buttonBox.button(QDialogButtonBox.Ok).setDefault(True)
whbLayout.addWidget(wlabel)
whbLayout.addWidget(self.wspinbox)
whbLayout.addWidget(bcheck)
qvbLayout.addLayout(whbLayout)
shbLayout.addWidget(styleLabel)
shbLayout.addWidget(self.styleQcombox)
qvbLayout.addLayout(shbLayout)
btnhbLayout.addWidget(buttonBox)
qvbLayout.addLayout(btnhbLayout)
self.connect(buttonBox, SIGNAL("accepted()"),self, SLOT("accept()"))
self.connect(buttonBox, SIGNAL("rejected()"),self, SLOT("reject()"))
self.setLayout(qvbLayout)
self.setWindowTitle("Pen Properties")
app=QApplication(sys.argv)
form=dumpDialog()
form.show()
app.exec_()