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

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

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

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

实现代码例如以下:

  1. # -*- coding: utf-8 -*-
  2. from PyQt4.QtGui import *
  3. from PyQt4.QtCore import *
  4. import sys
  5. QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))
  6. class StandardDialog(QDialog):
  7. def __init__(self,parent=None):
  8. super(StandardDialog,self).__init__(parent)
  9. self.setWindowTitle("Standard Dialog")
  10. filePushButton=QPushButton(self.tr("文件对话框"))
  11. colorPushButton=QPushButton(self.tr("颜色对话框"))
  12. fontPushButton=QPushButton(self.tr("字体对话框"))
  13. self.fileLineEdit=QLineEdit()
  14. self.colorFrame=QFrame()
  15. self.colorFrame.setFrameShape(QFrame.Box)
  16. self.colorFrame.setAutoFillBackground(True)
  17. self.fontLineEdit=QLineEdit("Hello World!")
  18. layout=QGridLayout()
  19. layout.addWidget(filePushButton,0,0)
  20. layout.addWidget(self.fileLineEdit,0,1)
  21. layout.addWidget(colorPushButton,1,0)
  22. layout.addWidget(self.colorFrame,1,1)
  23. layout.addWidget(fontPushButton,2,0)
  24. layout.addWidget(self.fontLineEdit,2,1)
  25. self.setLayout(layout)
  26. self.connect(filePushButton,SIGNAL("clicked()"),self.openFile)
  27. self.connect(colorPushButton,SIGNAL("clicked()"),self.openColor)
  28. self.connect(fontPushButton,SIGNAL("clicked()"),self.openFont)
  29. def openFile(self):
  30. s=QFileDialog.getOpenFileName(self,"Open file dialog","/","Python files(*.py)")
  31. self.fileLineEdit.setText(str(s))
  32. def openColor(self):
  33. c=QColorDialog.getColor(Qt.blue)
  34. if c.isValid():
  35. self.colorFrame.setPalette(QPalette(c))
  36. def openFont(self):
  37. f,ok=QFontDialog.getFont()
  38. if ok:
  39. self.fontLineEdit.setFont(f)
  40. app=QApplication(sys.argv)
  41. form=StandardDialog()
  42. form.show()
  43. app.exec_()

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

第13行设置程序的标题。

第15到17行创建各个button控件。

第19行创建一个QLineEdit类实例fileLineEdit。用来显示选择的文件名称。

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

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

第25到33行将各个控件进行布局。

第35到37行将各个button的clicked信号对应的槽进行连接。

openFile()方法是文件对话框button的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 获得用户选择的文件名称列表

做一个 选择路径界面,文件类型不显示,就选择路径



使用 getExistingDirectory就能够了

openColor()函数是颜色对话框buttonclicked信号的槽。当中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。

openFont()函数是字体对话框buttonclicked信号的槽。当中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)

《转》PyQt4 精彩实例分析* 实例2 标准对话框的使用的更多相关文章

  1. nodejs的模块系统(实例分析exprots和module.exprots)

    前言:工欲善其事,必先利其器.模块系统是nodejs组织管理代码的利器也是调用第三方代码的途径,本文将详细讲解nodejs的模块系统.在文章最后实例分析一下exprots和module.exprots ...

  2. Camera图像处理原理及实例分析-重要图像概念

    Camera图像处理原理及实例分析 作者:刘旭晖  colorant@163.com  转载请注明出处 BLOG:http://blog.csdn.net/colorant/ 主页:http://rg ...

  3. Linux I2C设备驱动编写(三)-实例分析AM3359

    TI-AM3359 I2C适配器实例分析 I2C Spec简述 特性: 兼容飞利浦I2C 2.1版本规格 支持标准模式(100K bits/s)和快速模式(400K bits/s) 多路接收.发送模式 ...

  4. 【转】Linux I2C设备驱动编写(三)-实例分析AM3359

    原文网址:http://www.cnblogs.com/biglucky/p/4059586.html TI-AM3359 I2C适配器实例分析 I2C Spec简述 特性: 兼容飞利浦I2C 2.1 ...

  5. Linux系统网络性能实例分析

    由于TCP/IP是使用最普遍的Internet协议,下面只集中讨论TCP/IP 栈和以太网(Ethernet).术语 LinuxTCP/IP栈和 Linux网络栈可互换使用,因为 TCP/IP栈是 L ...

  6. 《深入理解mybatis原理1》 MyBatis的架构设计以及实例分析

    <深入理解mybatis原理> MyBatis的架构设计以及实例分析 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构 ...

  7. C# format 日期 各种 符号 实例分析如何精确C#日期格式到毫秒

    摘 自: http://developer.51cto.com/art/200908/141145.htm 实例分析如何精确C#日期格式到毫秒 2009-08-03 10:48 paulfzm jav ...

  8. Camera图像处理原理及实例分析

    Camera图像处理原理及实例分析 作者:刘旭晖  colorant@163.com  转载请注明出处 BLOG:http://blog.csdn.net/colorant/ 主页:http://rg ...

  9. Jackson的用法实例分析

    这篇文章主要介绍了Jackson的用法实例分析,用于处理Java的json格式数据非常实用,需要的朋友可以参考下 通俗的来说,Jackson是一个 Java 用来处理 JSON 格式数据的类库,其性能 ...

随机推荐

  1. 小程序redirectTo不跳转

    微信小程序解决方案专辑:http://www.wxapp-union.com/special/solution.html 上面有很多新手坑,多搜搜一般都有. 举个例子: redirectTo不跳转的原 ...

  2. http://blog.csdn.net/muzizongheng/article/details/46795243

    http://blog.csdn.net/muzizongheng/article/details/46795243

  3. bash: /bin/bash^M: bad interpreter: No such file or directory

    在windows下编写shell脚本在linux下运行会出报错: [hadoop@master data]$ ./load_ods_table.sh -bash: ./load_ods_table.s ...

  4. Scala和Java二种方式实战Spark Streaming开发

    一.Java方式开发 1.开发前准备:假定您以搭建好了Spark集群. 2.开发环境采用eclipse maven工程,需要添加Spark Streaming依赖. 3.Spark streaming ...

  5. 利用chrony和ntp搭建时间同步服务器

    利用chrony和ntp搭建时间同步服务器 环境说明 系统版本    CentOS 6.9 x86_64 Network Time Protocol(NTP,网络时间协议)用于同步它所有客户端时钟的服 ...

  6. bind域名dns解析及主从服务的配置

    bind域名dns解析及主从服务的配置 1.dns解析介绍     人们习惯记忆域名,但机器间互相只认IP地址,域名与IP地址之间是多对一的关系,一个ip地址不一定只对应一个域名,且一个域名只可以对应 ...

  7. EffectiveJava(4)通过私有构造器强化不可实例化的能力

    通过私有构造器强化不可实例化的能力 原理:只有当类不包含显式的构造器时,编译器才会生成缺省的构造器,因此只要让这个类包含私有构造器,他就不能被实例化 这种方式下,子类没有可访问的超类构造器可调用 // ...

  8. NativeCode中通过JNI反射调用Java层的代码,以获取IMEI为例

    简单说,就是在NativeCode中做一些正常情况下可以在Java code中做的事儿,比如获取IMEI. 这种做法会使得静态分析Java层代码的方法失效. JNIEXPORT jstring JNI ...

  9. perl学习笔记一

    标量数据 标量:数字.字符.可以存储在标量变量中也可以从文件和设备中读取. 数字:所有数字内部格式相同——双精度浮点数. 浮点数直接量:程序员在程序中直接键入的数字. 整数直接量:6129804028 ...

  10. 倍福TwinCAT(贝福Beckhoff)基础教程2.2 TwinCAT常见类型使用和转换_函数块

    右击POUs,添加一个FB功能块,相比于FUN,FB功能块有INPUT,OUTPUT,还有VAR,即FB可以有多个输出,但是整个FB没有返回值   实现相同的功能,FB要比FUN难看的多,FB要声明实 ...