【转】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)


浙公网安备 33010602011771号