【转】PyQt4 精彩实例分析 实例 2 标准对话框的使用

和大多数操作系统一样,Windows 及 Linux 都提供了一系列的标准对话框,如文件选择,字体选择,颜色选
择等,这些标准对话框为应用程序提供了一致的观感。Qt 对这些标准对话框都定义了相关的类,这些类让使
用者能够很方便地使用标准对话框进行文件,颜色以及字体的选择。标准对话框在软件设计过程中是经常需要
使用的。


Qt 提供的标准对话框除了本实例提到的,还有
QErrorMessage,QInputDialog,QMessageBox,QPrintDialog,QProcessDialog 等,这些标准
对话框的使用在本书的后续部分将会陆续介绍。


本实例主要演示上面几种标准对话框的使用,如下图所示

在上图中,单击“文件对话框”按钮,会弹出文件选择对话框,选中的文件名将显示在右连,单击“颜色对话
框”按钮,会弹出颜色选择对话框,选中的颜色将显示在右边,单击“字体对话框”按钮,会弹出字体选择对话
框,选中的字体将更新右边显示的字符串。


实现代码如下:

 1 #!/usr/bin/python
 2 # -*- coding: utf-8 -*-
 3 
 4 from PyQt4.QtGui import *
 5 from PyQt4.QtCore import *
 6 import sys
 7 
 8 
 9 QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))
10 
11 class StandardDialog(QDialog):
12     
13     def __init__(self,  parent=None):
14         super(StandardDialog,  self).__init__(parent)
15         
16         self.setWindowTitle("Standard Dialog")
17 
18         self.btn_file = QPushButton(self.tr("File Dialog"))
19         self.btn_color = QPushButton(self.tr("Color Dialog"))
20         self.btn_font = QPushButton(self.tr("Font Dialog"))
21 
22         self.lineEdit_file = QLineEdit()
23         self.colorFrame = QFrame()
24         self.colorFrame.setFrameShape(QFrame.Box)
25         self.colorFrame.setAutoFillBackground(True)
26         self.lineEdit_font = QLineEdit("Hello Jakey!")
27 
28         self.Layout()
29         self.ConnectSignalSlot()
30 
31     def Layout(self):
32         layout = QGridLayout()
33         layout.addWidget(self.btn_file, 0, 0)
34         layout.addWidget(self.btn_color, 1, 0)
35         layout.addWidget(self.btn_font, 2, 0)
36         layout.addWidget(self.lineEdit_file, 0, 1)
37         layout.addWidget(self.colorFrame, 1, 1)
38         layout.addWidget(self.lineEdit_font, 2, 1)
39 
40         self.setLayout(layout)
41 
42     def ConnectSignalSlot(self):
43         self.connect(self.btn_file, SIGNAL("clicked()"), self.open_file)
44         self.connect(self.btn_color, SIGNAL("clicked()"), self.open_color)
45         self.connect(self.btn_font, SIGNAL("clicked()"), self.open_font)
46 
47     def open_file(self):
48         openFileName = QFileDialog.getOpenFileName(self, "Open file dialog",
49                                                      "/", "Python files(*.py)")
50         self.lineEdit_file.setText(str(openFileName))
51 
52     def open_color(self):
53         color = QColorDialog.getColor(Qt.blue)
54         if color.isValid():
55             self.colorFrame.setPalette(QPalette(color))
56 
57     def open_font(self):
58         font,ok = QFontDialog.getFont()
59         if ok:
60             self.lineEdit_font.setFont(font)
61 
62 def main():
63     app = QApplication(sys.argv)
64     form = StandardDialog()
65     form.show()
66     app.exec_()
67 
68 if __name__ == '__main__':
69     main()

第 9 行设定 tr 方法使用 utf8 编码来解析文字。

第 16 行 设置程序的标题

第 18-26 行 创建各个按钮控件

第 22 行创建一个QLineEdit类实例 lineEdit_file,用来显示选择的文件名

第 23 行创建一个 QFrame 类实例 colorFrame,当用户选择不同的颜色时,colorFrame 会根据用户选择的
颜色更新其背景。

第 26 行创建一个 QLineEdit 类实例 lineEdit_font,当用户选择不同的字体时,lineEdit_font 会根据
用户选择的字体更新其内容。

第 32 到 38 行将各个控件进行布局。

第 43 到 45 行将各个按钮的 clicked 信号相应的槽进行连接。

slotFile()方法是文件对话框按钮的 clicked 信号的槽,其中 getOpenFileName()是 QFileDialog 类
的一个静态方法,返回用户选择的文件名,如果用户选择取消,则返回一个空串。函数形式如下:

QString getOpenFileName (QWidget parent = None, QString caption = QString(),
QString directory = QString(), QString filter = QString(), Options options = 0)
QString getOpenFileName (QWidget parent = None, QString caption = QString(),
QString directory = QString(), QString filter = QString(), QString
selectedFilter = None, Options options = 0)

调用 getOpenFileName()函数将创建一个模态的文件对话框,如下图所示。directory 参数指定了默认的
目录,如果 directory 参数带有文件名,则该文件将是默认选中的文件,filter 参数对文件类型进行过
滤,只有与过滤器匹配的文件类型才显示,filter 可以同时指定多种过滤方式供用户选择,多种过滤器之间
用";;"隔开,用户选择的过滤器通过参数 selectedFilter 返回。

QFileDialog 类还提供了类似的其他静态函数,如下表,通过这些函数,用户可以方便地定制自己的文件对
话框。

静态函数                                      说明
getOpenFileName    获得用户选择的文件名
getSaveFileName    获得用户保存的文件名
getExistingDirectory    获得用户选择的已存在的目录名
getOpenFileNames    获得用户选择的文件名列表

slotColor()函数是颜色对话框按钮 clicked 信号的槽。其中 getColor()是 QColorDialog 的一个静态
函数,返回用户选择的颜色值,函数形式如下:

QColor QColorDialog.getColor (QColor initial = Qt.white, QWidget parent = None)
QColor QColorDialog.getColor (QColor, QWidget, QString, ColorDialogOptions
options = 0)

调用 getColor()函数将创建一个模态的颜色对话框,如下图所示。initial 参数指定了默认的颜色,默认
为白色,通过 isValid()可以判断用户选择的颜色是否有效,若用户选择取消,isValid()将返回
false。

slotFont()函数是字体对话框按钮 clicked 信号的槽。其中 getFont()是 QFontDialog 的一个静态函
数,返回用户选择的字体,函数形式如下:

(QFont, bool) getFont (QFont, QWidget, QString, FontDialogOptions)
(QFont, bool) getFont (QFont, QWidget, QString)
(QFont, bool) getFont (QFont, QWidget parent = None)
(QFont, bool) getFont (QWidget parent = None)

调用 getFont()函数将创建一个模态的字体对话框,如下图所示。用户选择 OK,函数返回(用户选择的字
体,True),否则返回(默认字体,False)

 


 








posted @ 2014-11-14 11:07  jakey.chen  阅读(908)  评论(0)    收藏  举报