PyQt4使用QDialogButtonBox操作实例代码讲解

来源:互联网 发布:阿里云服务器推荐码 编辑:程序博客网 时间:2024/05/20 23:37
#coding=utf8'''定义一个"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,列跨度为3QDialogButtonBox有自己的按钮信号,连接操代码如下: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 *#创建一个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)                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)                #使用SLOT方法连接按钮        self.connect(buttonBox, SIGNAL("accepted()"),self, SLOT("accept()")) #确认或者OK按钮        self.connect(buttonBox, SIGNAL("rejected()"),self, SLOT("reject()"))#取消或者Cancel按钮                self.setLayout(qvbLayout)        self.setWindowTitle("Pen Properties")        app=QApplication(sys.argv)form=dumpDialog()form.show()app.exec_()                        

原创粉丝点击