#coding=utf8
'''
定义一个"dump"的对话框,该对话框的widget通过对话框的调用者设置为初始对象值,
对话框的最终值再次通过对话框的调用者直接从widget中获得。
一个dump的对话框不知道把它的小部件用于呈现和编辑哪些数据。
但是,也可以应用一些基本的验证在一个dump对话框widget上,
但是设置包含widget之间相互依赖关系的验证并不常见(或总是可能)。
换句话说,form-level验证通常不在dump对话框中使用。
dump对话通常是带有一个“accept(或者OK)”和一个"reject(或者Cancel)"按钮的对话窗口。
使用dump对话的主要优点是不必编写任何代码来为对话提供一个API,也不用编写任何附加逻辑的代码。
这些好处都是公开访问所有小部件的结果。主要的缺点是使用它们的代码与用户界面(直接访问窗口小部件)紧紧相关,
所以无法轻松实现复杂的验证 - 它们比标准方便得多或智能对话框,如果需要在多个地方。
下面给出一个实例用来说明:
该对话是一个用户设置一些笔属性,例如笔的宽度、样式、是否斜边。
该对话框包含的widget:三个水平框、有一个垂直框、整数范围调节器、复选框、下拉框、按钮。
'''
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
#创建一个dump对话框
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)
okBtn=QPushButton("&OK")
cancelBtn=QPushButton("&Cancel")
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(okBtn)
btnhbLayout.addWidget(cancelBtn)
qvbLayout.addLayout(btnhbLayout)
#使用SLOT方法连接按钮
self.connect(okBtn, SIGNAL("clicked()"),self,SLOT("accept()"))
self.connect(cancelBtn, SIGNAL("clicked()"),self,SLOT("reject()"))
self.setLayout(qvbLayout)
self.setWindowTitle("Pen Properties")
app=QApplication(sys.argv)
form=dumpDialog()
form.show()
app.exec_()
运行结果图,在首次运行时,不会出现下划线,需要按下快捷键组合才会出现: