《转》PyQt4 精彩实例分析* 实例2 标准对话框的使用
和大多数操作系统一样,Windows及Linux都提供了一系列的标准对话框,如文件选择,字体选择,颜色选择等,这些标准对话框为应用程序提供了一致的观感。Qt对这些标准对话框都定义了相关的类。这些类让使用者可以非常方便地使用标准对话框进行文件,颜色以及字体的选择。标准对话框在软件设计过程中是常常须要使用的。
Qt提供的标准对话框除了本实例提到的,还有QErrorMessage。QInputDialog。QMessageBox,QPrintDialog,QProcessDialog等,这些标准对话框的使用在本书的兴许部分将会陆续介绍。
本实例主要演示上面几种标准对话框的使用,例如以下图所看到的
在上图中,单击“文件对话框”button,会弹出文件选择对话框,选中的文件名称将显示在右连。单击“颜色对话框”button,会弹出颜色选择对话框,选中的颜色将显示在右边,单击“字体对话框”button。会弹出字体选择对话框,选中的字体将更新右边显示的字符串。
实现代码例如以下:
- # -*- coding: utf-8 -*-
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
- import sys
- QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))
- class StandardDialog(QDialog):
- def __init__(self,parent=None):
- super(StandardDialog,self).__init__(parent)
- self.setWindowTitle("Standard Dialog")
- filePushButton=QPushButton(self.tr("文件对话框"))
- colorPushButton=QPushButton(self.tr("颜色对话框"))
- fontPushButton=QPushButton(self.tr("字体对话框"))
- self.fileLineEdit=QLineEdit()
- self.colorFrame=QFrame()
- self.colorFrame.setFrameShape(QFrame.Box)
- self.colorFrame.setAutoFillBackground(True)
- self.fontLineEdit=QLineEdit("Hello World!")
- layout=QGridLayout()
- layout.addWidget(filePushButton,0,0)
- layout.addWidget(self.fileLineEdit,0,1)
- layout.addWidget(colorPushButton,1,0)
- layout.addWidget(self.colorFrame,1,1)
- layout.addWidget(fontPushButton,2,0)
- layout.addWidget(self.fontLineEdit,2,1)
- self.setLayout(layout)
- self.connect(filePushButton,SIGNAL("clicked()"),self.openFile)
- self.connect(colorPushButton,SIGNAL("clicked()"),self.openColor)
- self.connect(fontPushButton,SIGNAL("clicked()"),self.openFont)
- def openFile(self):
- s=QFileDialog.getOpenFileName(self,"Open file dialog","/","Python files(*.py)")
- self.fileLineEdit.setText(str(s))
- def openColor(self):
- c=QColorDialog.getColor(Qt.blue)
- if c.isValid():
- self.colorFrame.setPalette(QPalette(c))
- def openFont(self):
- f,ok=QFontDialog.getFont()
- if ok:
- self.fontLineEdit.setFont(f)
- app=QApplication(sys.argv)
- form=StandardDialog()
- form.show()
- 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 标准对话框的使用的更多相关文章
- nodejs的模块系统(实例分析exprots和module.exprots)
前言:工欲善其事,必先利其器.模块系统是nodejs组织管理代码的利器也是调用第三方代码的途径,本文将详细讲解nodejs的模块系统.在文章最后实例分析一下exprots和module.exprots ...
- Camera图像处理原理及实例分析-重要图像概念
Camera图像处理原理及实例分析 作者:刘旭晖 colorant@163.com 转载请注明出处 BLOG:http://blog.csdn.net/colorant/ 主页:http://rg ...
- Linux I2C设备驱动编写(三)-实例分析AM3359
TI-AM3359 I2C适配器实例分析 I2C Spec简述 特性: 兼容飞利浦I2C 2.1版本规格 支持标准模式(100K bits/s)和快速模式(400K bits/s) 多路接收.发送模式 ...
- 【转】Linux I2C设备驱动编写(三)-实例分析AM3359
原文网址:http://www.cnblogs.com/biglucky/p/4059586.html TI-AM3359 I2C适配器实例分析 I2C Spec简述 特性: 兼容飞利浦I2C 2.1 ...
- Linux系统网络性能实例分析
由于TCP/IP是使用最普遍的Internet协议,下面只集中讨论TCP/IP 栈和以太网(Ethernet).术语 LinuxTCP/IP栈和 Linux网络栈可互换使用,因为 TCP/IP栈是 L ...
- 《深入理解mybatis原理1》 MyBatis的架构设计以及实例分析
<深入理解mybatis原理> MyBatis的架构设计以及实例分析 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构 ...
- C# format 日期 各种 符号 实例分析如何精确C#日期格式到毫秒
摘 自: http://developer.51cto.com/art/200908/141145.htm 实例分析如何精确C#日期格式到毫秒 2009-08-03 10:48 paulfzm jav ...
- Camera图像处理原理及实例分析
Camera图像处理原理及实例分析 作者:刘旭晖 colorant@163.com 转载请注明出处 BLOG:http://blog.csdn.net/colorant/ 主页:http://rg ...
- Jackson的用法实例分析
这篇文章主要介绍了Jackson的用法实例分析,用于处理Java的json格式数据非常实用,需要的朋友可以参考下 通俗的来说,Jackson是一个 Java 用来处理 JSON 格式数据的类库,其性能 ...
随机推荐
- How To Use NSOperations and NSOperationQueues
Update 10/7/14: This tutorial has now been updated for iOS 8 and Swift; check it out! Everyone has h ...
- go+mysql实现页面的增删改查练习
原文地址:http://www.niu12.com/article/35 初次学go,在了解一些基础之后就开始做一个用户的增删改查来回顾知识,有很多数据验证和安全漏洞并没有考虑,只当作联系 前提:下载 ...
- linux bash 入门
#!/bin/bash #shell使用的熟练成都反映用户对Unix/Linux使用的熟练程度 #shell 有两种执行命令的方式:交互式和批处理 #常见的shell脚本解释器有bash,sh,csh ...
- hdu 4512 吉哥系列故事——完美队形I(最长公共上升自序加强版)
首先要去学习最长公共上升子序列LCIS.然后是对n*n效率的算法进行优化,这里要注意的是能够求出来的序列中间能够有一个最高的.刚開始将输入的数组进行逆置,写下来发现这可能存在问题. 只是详细是什么也没 ...
- 【转载】LR - 细节解析,为什么LR脚本会去访问“脚本中不存在的“资源?
问题描述 同事遇到的一个问题,LR执行性能测试脚本时,总报出错误,无法访问一个图片的地址,但脚本中明明没有对该资源的请求. Action4.c(12): Warning -27796: Failed ...
- 【Excle数据透视表】如何在数据透视表中使用合并单元格标志
先有数据透视表如下: 现在看着这个格式不舒服,我们希望调整成如下这种样式 步骤 单击数据透视表任意单元格→右键→数据透视表选项→布局和格式→合并且居中排列带标签的单元格 注意:如果数据透视表报表布局不 ...
- 【Shell】Read命令
read命令从键盘读取变量的值,通常用在shell脚本与用户进行交互的场合.该命令可以一次性读取多个变量的值,变量的输入和输出需要使用空格隔开.在read命令后面,如果没有指定变量名,读取的数据将被自 ...
- Atitit. 高级软件project师and 普通的差别 高级编程的门槛总结
Atitit. 高级软件project师and 普通的差别 高级编程的门槛总结 1. 完备的知识体系 2 2. 编程理论/原理的掌握 2 1.1. 掌握经常使用的概念(ORM,IOC.AOP,eve ...
- storm - 经常使用命令
1.提交Topologies 命令格式:storm jar [jar路径] [拓扑包名.拓扑类名][stormIP地址][stormport][拓扑名称][參数] eg: storm jar /hom ...
- 正则表达式匹配 href 和text内容
string pattern = @"<a[^>]*href=(""(?<href>[^""]*)""|' ...