和大多数操作系统一样,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. Sql性能检测工具:Sql server profiler和优化工具:Database Engine Tuning Advisor

    原文:Sql性能检测工具:Sql server profiler和优化工具:Database Engine Tuning Advisor 一.工具概要     数据库应用系统性能低下,需要对其进行优化 ...

  2. App Distribution Guide (二)

    Configuring Your Xcode Project for Distribution  You can edit your project settings anytime, but som ...

  3. ansible的inventory文件含义

    默认文件为/etc/ansible/hosts 例如 [test] web.yinzhipeng.com dhcp ansible_ssh_host=172.16.18.195 1.中括号中的名字代表 ...

  4. 基于物品过滤的Slope One 算法

    Slope One 算法是由 Daniel Lemire 教授在 2005 年提出的一个 Item-Based 推荐算法. 他的主要优点是简单,易于扩展.实际上有多个Slope One算法,在此主要学 ...

  5. django验证码django-simple-captha

    搭建网站很经常要用到验证码,django中就有这样的中间件django-simple-captha githup地址https://github.com/mbi/django-simple-captc ...

  6. 弄清java中的字节与字符

    问题 在java中,一个字符等于多少字节? 或者更详细的问:在java中,一个英文字符等于多少字节?一个中文字符等于多少字节? 答案 Java采用unicode来表示字符,java中的一个char是2 ...

  7. 一分钟学awk够用

    [转载于58同城沈剑] 1.什么是AWK(1)Aho.Weinberger.Kernighan三位发明者名字首字母:(2)一个行文本处理工具: 2.AWK基本原理2.1原理:逐行处理文件中的数据 2. ...

  8. RPC接口mock测试

    转载:http://blog.csdn.net/ronghuanye/article/details/71124127 1        简介 Dubbo目前的应用已经越来越广泛.或者基于Dubbo二 ...

  9. JS杂技之无中间变量的值交换方式

    从http://www.cnblogs.com/liuyitian/p/4081517.html#3074553看到一种无中间变量的值交换方式,具体如下: var a = 1;var b = 2;a ...

  10. Linux组件封装(二)中条件变量Condition的封装

    条件变量主要用于实现线程之间的协作关系. pthread_cond_t常用的操作有: int pthread_cond_init(pthread_cond_t *cond, pthread_conda ...