捐助郴维网
感谢您对郴维网的支持,你的支持将是郴维网持续发展的动力!
二维码
×
当前位置:郴维网 >Pyqt5 > 正文
1 2018.04

基本界面组件之Dialog(1)

点击次数:1385 更新时间:2018-4-1 21:55:24  【打印此页

在大部分的操作系统中,为了更好的实现人机交互,windows以及linux中均为提供一系列的对话框来完成特定场景下的功能,诸如字体大小选择,字体颜色选择等等。PyQt5中定义了一些列的标准对话框的类,让使用者能够方便和快捷的通过各个类完成字体大小、颜色,以及文件的选择。 
PyQt5的场景的对话框有,QFileDialog,QColorDialog,QFontDialog,QErrorMessage,QInputDialog,QMessageBox,QPrintDialog,QProcessDialog等。

QFileDialog

class QFileDialog(QDialog)
 |  QFileDialog(QWidget, Qt.WindowFlags)
 |  QFileDialog(QWidget parent=None, str caption='', str directory='', str filter='')

QFileDialog继承自QDialog。QFileDialog是PyQt中用于文件打开和保存的标准对话框。

通过如下的示例进行说明:

#-*- coding:utf-8 -*-
'''
QFileDialog
'''

from PyQt5.QtWidgets import QApplication, QDialog,QWidget, QFileDialog, QPushButton, QLineEdit, QGridLayout
import sys
import os


class FileDialog(QDialog):
    def __init__(self):
        super(FileDialog,self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("QFileDialog")
        self.setGeometry(400,400,300,260)

        self.fileButton = QPushButton("文件对话框")
        self.fileLineEdit = QLineEdit()
        self.fileButton.clicked.connect(lambda:self.openFile(self.fileLineEdit.text()))

        self.mainLayout = QGridLayout()
        self.mainLayout.addWidget(self.fileButton,0,0)
        self.mainLayout.addWidget(self.fileLineEdit,0,1)

        self.setLayout(self.mainLayout)

    def openFile(self,filePath):
        if os.path.exists(filePath):
            path = QFileDialog.getOpenFileName(self,"Open File Dialog",filePath,"Python files(*.py);;Text files(*.txt)")
        else:
            path = QFileDialog.getOpenFileName(self,"Open File Dialog","/","Python files(*.py);;Text files(*.txt)")

        self.fileLineEdit.setText(str(path[0]))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = FileDialog()
    ex.show()
    sys.exit(app.exec_()) 

运行之后的效果: 
说明: 这里写图片描述 
说明: 这里写图片描述 
控件说明:

控件类型

控件名称

作用

QPushButton

fileButton

确认打开文件路径

QLineEdit

fileLineEdit

显示打开的文件路径

QFileDialog

 

文件操作对话框类

示例说明: 
通过文件对话框来选择所需的文件(默认为当前路径,或者QLineEdit指定的路径),并且将打开的文件路径显示在QLineEdit中。 
代码分析: 
L21~23:

self.fileButton = QPushButton("文件对话框")
self.= QLineEdit()
self.fileButton.clicked.connect(lambda:self.openFile(self.fileLineEdit.text()))

创建QPushButton和QLineEdit实例,并且绑定fileButton的clicked信号与自定义的槽函数openFile(). 
由于槽函数openFile()在调用的时候需要传入参数,因此使用lambda将传入参数的openFile()重新定义作为槽函数,即触发clicked事件的时候将调用openFile(self.fileLineEdit.text())) 这个槽函数。

L25~27:

        self.mainLayout = QGridLayout()
        self.mainLayout.addWidget(self.fileButton,0,0)
        self.mainLayout.addWidget(self.fileLineEdit,0,1)

创建网格布局,将定义的fileButton 和fileLineEdit 添加到布局中

L31~37:

    def openFile(self,filePath):
        if os.path.exists(filePath):
            path = QFileDialog.getOpenFileName(self,"Open File Dialog",filePath,"Python files(*.py);;Text files(*.txt)")
        else:
            path = QFileDialog.getOpenFileName(self,"Open File Dialog","/","Python files(*.py);;Text files(*.txt)")

        self.fileLineEdit.setText(str(path[0]))

自定义的槽函数,用来通过QFileDialog来打开对应目录的文件。 
os.path.exists()判断输入的字符串是否为一个路径,如果是一个路径则通过,QFileDialog.getOpenFileName()打开对应filePath的目录;负责打开“/”路径的目录,及当前程序执行路径的根目录。 
由于QFileDialog类有很多方法均为静态方法,因此在没有实例化对象的情况下,直接通过类名操作静态方法,其中getOpenFileName()就为静态方法。

 |  
 |  getOpenFileName(...)
 |      QFileDialog.getOpenFileName(QWidget parent=None, str caption='', str directory='', str filter='', str initialFilter='', QFileDialog.Options options=0) -> (str, str)

第1个参数parent,用于指定父组件;

第2个参数caption,是QFileDialog对话框的标题;

第3个参数directory,是对话框显示时默认打开的目录,”.” 代表程序运行目录,”/” 代表当前盘符的根目录(Windows,Linux下/就是根目录了),需要注意不同平台下路径的显示方式,比如Windows平台的C盘”C:\”等

第4个参数filter,是对话框中文件后缀名过滤器。比如我们使用”Python files(.py)”就让它只能显示后缀名是.py的文件。如果需要使用多个过滤器,使用”;;”分割,比如”Python files(.py);;Text files(.txt)”,为两个过滤器分别过滤python文件和txt文件;

第5个参数initialFilter,为默认的过滤器;

第6个参数options,是对话框的一些参数设定,比如只显示文件夹等等,它的取值是 QFileDialog.Options,每个选项可以使用 | 运算组合起来。


QColorDialog

class QColorDialog(Qdialog)
 |  QColorDialog(Qwidget parent=None)
 |  QColorDialog(Qcolor, Qwidget parent=None)

QColorDialog依旧继承自Qdialog。QColorDialog是PyQt中用于颜色原则的标准对话框。

通过如下的示例进行说明:

#-*- coding:utf-8 -*-
'''
QColorDialog
'''

from PyQt5.QtWidgets import Qapplication, Qdialog,Qwidget, QColorDialog, QPushButton, QGridLayout, Qframe 
from PyQt5.QtGui import Qpalette,Qcolor
import sys
from PyQt5.QtCore import Qt


class ColorDialog(Qdialog):
    def __init__(self):
        super(ColorDialog,self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("ColorDialog")
        self.setGeometry(400,400,300,260)

        self.colorButton = QPushButton("颜色对话框")
        self.colorFrame = Qframe()
        self.colorFrame.setFrameShape(Qframe.Box)
        self.colorFrame.setAutoFillBackground(True)
        self.colorButton.clicked.connect(self.openColor)

        self.mainLayout = QGridLayout()
        self.mainLayout.addWidget(self.colorButton,0,0)
        self.mainLayout.addWidget(self.colorFrame,0,1)

        self.setLayout(self.mainLayout)

    def openColor(self):
        color = QColorDialog.getColor(Qt.white,None,"Selectting Color")
        if color.isValid():
            self.colorFrame.setPalette(Qpalette(color))

if __name__ == '__main__':
    app = Qapplication(sys.argv)
    ex = ColorDialog()
    ex.show()
    sys.exit(app.exec_()) 

运行之后的效果: 
说明: 这里写图片描述 
说明: 这里写图片描述 
控件说明:

控件类型

控件名称

作用

QPushButton

colorButton

打开颜色对话框

Qframe

colorFrame

添加调色盘控件,用于显示选择的颜色

示例说明: 
通过颜色对话框选择所需要的颜色,并将最终选择的颜色显示在调色盘中。 
代码分析: 
L22~26:

self.colorButton = QPushButton("颜色对话框")
self.colorFrame = Qframe()
self.colorFrame.setFrameShape(Qframe.Box)
self.colorFrame.setAutoFillBackground(True)
self.colorButton.clicked.connect(self.openColor)

实例化colorButton 和colorFrame 对象,其中绑定colorButton 的clicked信号与自定义的槽函数openColor(). 
在colorFrame 中通过setPalette()方法添加调色盘,最终将选择的颜色显示在调色盘中。 
setFrameShape()设定frame的形状 
setAutoFillBackground()设定frame自动填充背景色

L28~30:

self.mainLayout = QGridLayout()
self.mainLayout.addWidget(self.colorButton,0,0)
self.mainLayout.addWidget(self.colorFrame,0,1)

将colorButton和colorFrame添加到网格布局的对应位置

L34~37:

    def openColor(self):
        color = QColorDialog.getColor(Qt.white,None,"Selectting Color")
        if color.isValid():
            self.colorFrame.setPalette(Qpalette(color))

自定义选择颜色的方法,QColorDialog.getColor()打开颜色选择对话框,并且将选择的颜色设置到colorFrame的调色盘部件中。 
由于QColorDialog类有很多方法均为静态方法,因此在没有实例化对象的情况下,直接通过类名操作静态方法,其中getColor()就为静态方法。

 |  getColor(…)
 |      QColorDialog.getColor(Qcolor initial=Qt.white, Qwidget parent=None, str title=Qstring(), QColorDialog.ColorDialogOptions options=0) -> Qcolor
 |  

第1个参数initial,用于指定默认的颜色,函数默认为Qt.white;

第2个参数parent,用于指定父组件;

第3个参数title,是QColorDialog对话框的标题;

第4个参数options,是对话框的一些参数设定,比如是否显示Alpha值等等,每个选项可以使用 | 运算组合起来。具体可以查看API函数的说明。

QColorDialog操作相对简单一些,具体的API的一些使用可以参考一下官网的说明。

Tips
郴维网为您提供各类专业服务:
软件开发,电脑配件销售,WIFI路由器销售,上门电脑维修,上门安装系统,系统安装,软、硬件安装,电脑除尘清灰,显示器维修,WIFI安装调试,服务器维护,数据恢复,密码破解,网络布线,网络检修,打印机维修,打印机加碳粉,苹果电脑安装系统,苹果电脑安装双系统,监控安装维护,电脑外包,笔记本电脑维修,餐饮、美容行业软件安装 等。。。。。。
点击次数:1385 更新时间:2018-4-1 21:55:24  【打印此页
关键词推荐:郴州电脑城 郴州电脑维修公司 维修电脑公司 郴州软件开发 上门电脑维修 上门安装系统 笔记本电脑维修 郴州打印机维修 打印机加碳粉 电脑安装双系统 苹果电脑双系统 液晶显示器维修 联想笔记本维修 联想笔记本维修电话 戴尔笔记本维修电话 郴州戴尔笔记本维修 戴尔笔记本郴州维修点 华硕笔记本维修点 郴州华硕笔记本维修 郴州笔记本上网维修