Pyqt5系列(四)-基本界面组件之Dialog(1)

时间:2022-11-15 23:03:53

在大部分的操作系统中,为了更好的实现人机交互,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
'''

__author__ = 'Tony Zhu'

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_())

运行之后的效果:
Pyqt5系列(四)-基本界面组件之Dialog(1)
Pyqt5系列(四)-基本界面组件之Dialog(1)
控件说明:

控件类型 控件名称 作用
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
'''

__author__ = 'Tony Zhu'

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_())

运行之后的效果:
Pyqt5系列(四)-基本界面组件之Dialog(1)
Pyqt5系列(四)-基本界面组件之Dialog(1)
控件说明:

控件类型 控件名称 作用
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的一些使用可以参考一下官网的说明。