当前位置: 首页 > news >正文

PyQt5基本窗口控件(对话框类控件)

对话框类控件

QDialog

为了更好地实现人机交互,比如Windows及Linux等系统均会提供一系列的标
准对话框来完成特定场景下的功能,如选择字号大小、字体颜色等。在PyQt5中定
义了一系列的标准对话框类,让使用者能够方便和快捷地通过各个类完成字号大小、
字体颜色以及文件的选择等。

QDiaIog类的子类主要有QMessageBox、QFiIeDialog、QFontDialog、QInputDialog
等,这些内容在本节都会介绍到。

QDialog类的继承结构如图4-30所示。

image
QDialog类中的常用方法如表4-21所示。

方法描述
setWindowTitIe()设置对话框标题
setWindowModality()设置窗口模态。取值如下:QtNonModal,非模态,可以和程序的其他窗交互;Qt.WindowModaI,窗口模态,程序在未处理完当前对话框时,将阻止和对话框的父窗口进行交;Qt.ApplieationModaI,应程序模态,阻止和任何其他窗口进行交互

QDialog的使用

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtWidgets import *class DialogDemo(QMainWindow):def __init__(self,parent=None):super(DialogDemo,self).__init__(parent)self.setWindowTitle("Dialog例子")self.resize(350,300)self.btn=QPushButton(self)self.btn.setText("弹出对话框")self.btn.move(50,50)self.btn.clicked.connect(self.showdialog)def showdialog(self):dialog=QDialog()btn=QPushButton("ok",dialog)btn.move(50,50)dialog.setWindowTitle("Dialog")dialog.setWindowModality(Qt.ApplicationModal)dialog.exec_()if __name__=='__main__':app=QApplication(sys.argv)demo=DialogDemo()demo.show()sys.exit(app.exec_())

运行效果

VeryCapture_20250427223544
代码分析
在这个例子中,Dialog窗口的WindowModality属性决定是否为模态或非模态。
当用户按下Esc键时,对话框窗口将会默认调用QDialog.reject()方法,然后关闭对
话框窗口。

单击QWidget窗口中的PushButton按钮时,将生成一个对话框窗口。在对话框
窗口的标题栏上没有最小化和最大化控件。以下代码将给按钮的clicked信号添加槽
函数showdialog()。

self.btn.clicked.connect(self.showdialog)

由于DiaIog窗口的WindowModaIity属性设置为Qt.AppIicationModal模态,用
户只有关闭所弹出的对话框窗口后,才能关闭主窗口。以下代码用于设置对话框模态:

dialog.setWindowModality(Qt.ApplicationModal)

QMessageBox

QMessageBox是一种通用的弹出式对话框,用于显示消息,允许用户通过单击
不同的标准按钮对消息进行反馈。每个标准按钮都有一个预定义的文本、角色和十
六进制数。

QMessageBox类提供了许多常用的弹出式对话框,如提示、警告、错误、询问、
关于等对话框。这些不同类型的QMessageBox对话框只是显示时的图标不同,其他
功能是一样的。

QMessageBox类中的常用方法如表4-22所示。

方法描述
information(QWidget parent,title,text,buttons,defaultButton)弹出消息对诂框,各参数解释如下:parent,指定的父窗口控件title,对话标题;text,对话框文本;buttons:多个标冲按钮,默认为OK按钮;defauItButtont:默认选中的标准按钮,默认是第一个标准按钮
question(QWidget parent,title,text,buttons,deftuItButton)弹出问答对话框(各参数解释同上)
warning(QWidget parent,title,text,buttons,defaultButton)弹出警告对话框(各参数解释同上)
ctiticaI(QWidget parent,title,text.buttons,defauItButton)弹出错误对话框(各参数解释同上)
about(QWidget parent,title,text)弹出关于对话框(各参数解释同上)
setTitle()设置标题
setText()设置消息正文
setIcon()设置出对话框的图片

QMessageBox的使用

import sys
from PyQt5.QtCore import*
from PyQt5.QtGui import *
from PyQt5.QtWidgets import*class WinForm(QWidget):def __init__(self):super(WinForm,self).__init__()self.setWindowTitle("QMessageBox")self.resize(300,100)self.myButton=QPushButton(self)self.myButton.setText("点击弹出消息框")self.myButton.clicked.connect(self.msg)def msg(self):# 使用infomation信息框reply=QMessageBox.information(self,"标题","对话框消息正文",QMessageBox.Yes|QMessageBox.No,QMessageBox.Yes)print(reply)if __name__ == '__main__':app = QApplication(sys.argv)demo=WinForm()demo.show()sys.exit(app.exec_())

运行效果

VeryCapture_20250427231327

QInputDialog

QInputDialog控件是一个标准对话框,由一个文本框和两个按钮(OK按钮和
Cancel按钮)组成。当用户单击OK按钮或按Enter键后,在父窗口可以收集通过
QlnputDialog控件输入的信息。QInputDialog控件是QDialog标准对话框的一部分。

在QInputDialog控件中可以输入数字、字符串或列表中的选项。标签用于提示
必要的信息。

QInputDialog类中的常用方法如表4-25所示。

方法描述
getlnt()从控件中获得标准整数输入
getDouble()从控件中获得标准浮点数输入
getText()从控件中获得标准字符串输入
getItem()从控件中获得列表里的选项输入

QlnputDiaIog的使用

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *class InputdialogDemo(QWidget):def __init__(self,parent=None):super(InputdialogDemo,self).__init__(parent)layout=QFormLayout()self.btn1=QPushButton("获取列表里的选项")self.btn1.clicked.connect(self.getItem)self.le1=QLineEdit()layout.addRow(self.btn1,self.le1)self.btn2=QPushButton("获取字符串")self.btn2.clicked.connect(self.getText)self.le2=QLineEdit()layout.addRow(self.btn2,self.le2)self.btn3=QPushButton("获得整数")self.btn3.clicked.connect(self.getInt)self.le3=QLineEdit()layout.addRow(self.btn3,self.le3)self.setLayout(layout)self.setWindowTitle("Input Dialog 例子")def getItem(self):items=("C","C++","Java","Python")item,ok=QInputDialog.getItem(self,"select input dialog","语言列表",items,0,False)if ok and item:self.le1.setText(item)def getText(self):text,ok=QInputDialog.getText((self,"Text Input Dialog",'输入姓名:'))if ok:self.le2.setText(str(text))def getInt(self):num,ok=QInputDialog.getInt(self,"integer inpt dualog","输入数字")if ok:self.le3.setText(str(num))if __name__ == '__main__':app=QApplication(sys.argv)demo=InputdialogDemo()demo.show()sys.exit(app.exec_())

运行效果截图

VeryCapture_20250428225846
代码分析:
在这个例子中,在QFormLayout布局管理器中放置了三个按钮和三个文本框。
当单击按钮时,将弹出标准对话框,把按钮的单击信号与自定义的槽函数连接起来。

self.btn1.clicked.connect(self.getItem)
self.btn2.clicked.connect(self.getText)
self.btn3.clicked.connect(self.getInt)

当调用QInputDialog.getltem()函数时,QlnputDialog控件包含一个QCombox控
件和两个按钮,用户从QCombox中选择一个选项后,允许用户确认或取消操作。

 def getItem(self):items=("C","C++","Java","Python")item,ok=QInputDialog.getItem(self,"select input dialog","语言列表",items,0,False)if ok and item:self.le1.setText(item)

同理,当调用QInputDialog、getText()函数时,QInputDialog控件包含一个文本框
和两个按钮,允许用户输入字符串;当调用QInputDialog.getInt()函数时,QInputDialog
包含一个QSpinBox控件和两个按钮,允许用户输入整数。

QFontDialog

QFontDialog控件是一个常用的字体选择对话框,可以让用户选择所显示文本的
字号大小、样式和格式。QFontDialog是QDialog标准对话框的一部分。使用
QFontDialog类的静态方法getFont(),可以从字体选择对话框中选择文本的显示字号
大小、样式和格式。
QFontDialog的使用

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *class FontDialogDemo(QWidget):def __init__(self,parent=None):super(FontDialogDemo,self).__init__(parent)layout=QVBoxLayout()self.fontButton=QPushButton("choose font")self.fontButton.clicked.connect(self.getFont)layout.addWidget(self.fontButton)self.fontLineEdit=QLabel("Hello,测试字体例子")layout.addWidget(self.fontLineEdit)self.setLayout(layout)self.setWindowTitle("Font Dialog 例子")def getFont(self):font,ok=QFontDialog.getFont()if ok:self.fontLineEdit.setFont(font)if __name__=='__main__':app=QApplication(sys.argv)demo=FontDialogDemo()demo.show()sys.exit(app.exec_())

运行效果:

VeryCapture_20250428232130
代码分析:
在这个例子中,通过字体选择对话框选择相应的字体,并且所选择字体的效果
显示在QLineEdit的文本上。

实例化fontButton和fontLineEdit对象,并将fontButton的clicked信号和槽函
数getFont()绑定在一起。

self.fontButton=QPushButton("choose font")
self.fontButton.clicked.connect(self.getFont)
self.fontLineEdit=QLabel("Hello,测试字体例子")

创建QVBoxLayout布局,在垂直布局管理器中添加fontButton和fontLineEdit
组件,并按照相应的位置添加到栅格布局中。

layout=QVBoxLayout()
layout.addWidget(self.fontButton)
layout.addWidget(self.fontLineEdit)

当单击fontButton按钮时,将clicked信号发送到槽函数getFont()中。

self.fontButton.clicked.connect(self.getFont)

自定义槽函数,选择字体,并将字体效果设置到fontLineEdit中。getFont()方法
返回的为元组类型,同时返回所选择的字体和函数执行的状态。

 def getFont(self):font,ok=QFontDialog.getFont()if ok:self.fontLineEdit.setFont(font)

QFileDialog

QFileDialog是用于打开和保存文件的标准对话框。QFileDialog类继承自
QDialog类。
QFileDialog在打开文件时使用了文件过滤器,用于显示指定扩展名的文件。也
可以设置使用QFileDialog打开文件时的起始目录和指定扩展名的文件。
QFileDialog类中的常用方法如表4-26所示。

方法描述
getOpenFileName()返回用户所选择文件的名称,并打开该文件
getSaveFiIeName()使用用户选择的文件名并保存文件
setFiIeMode()可以选择的文件类型,枚举常量是:QFileDialog.AnyFile,任何文件;QFileDialog.EnstingFile,己存在的文件;QFi]eDialog.mrectory,文件且录;QFileDialog.ExistingFiles,己经存在的多个文件
setFilter()设置过滤器,只显示过滤器允许的文件类型

QFileDialog的使用

# -*- coding: utf-8 -*-'''【简介】PyQt5中 QFileDialog 例子'''import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *class filedialogdemo(QWidget):def __init__(self, parent=None):super(filedialogdemo, self).__init__(parent)layout = QVBoxLayout()self.btn = QPushButton("加载图片")self.btn.clicked.connect(self.getfile)layout.addWidget(self.btn)self.le = QLabel("")layout.addWidget(self.le)self.btn1 = QPushButton("加载文本文件")self.btn1.clicked.connect(self.getfiles)layout.addWidget(self.btn1)self.contents = QTextEdit()layout.addWidget(self.contents)self.setLayout(layout)self.setWindowTitle("File Dialog 例子")def getfile(self):fname, _ = QFileDialog.getOpenFileName(self, 'Open file', 'c:\\', "Image files (*.jpg *.gif)")self.le.setPixmap(QPixmap(fname))def getfiles(self):dlg = QFileDialog()dlg.setFileMode(QFileDialog.AnyFile)dlg.setFilter(QDir.Files)if dlg.exec_():filenames = dlg.selectedFiles()f = open(filenames[0], 'r')with f:data = f.read()self.contents.setText(data)if __name__ == '__main__':app = QApplication(sys.argv)ex = filedialogdemo()ex.show()sys.exit(app.exec_())

运行效果

image
代码分析:
在这个例子中,通过文件对话框来选择文件,其中第一个文件对话框只允许打
开图片文件,并把所加载的图片显示在标签(QLabel)中;第二个文件对话框只允
许打开文本文件,并把文本内容显示在文本框(QTextEdit)内。
第一个按钮使用QFileDialog.getOpenFileNam(),调用文件对话框来显示图像,
并显示在一个标签控件中。它负责打开c盘目录下的文件。其核心代码如下:

 fname, _ = QFileDialog.getOpenFileName(self, 'Open file', 'c:\\', "Image files (*.jpg *.gif)")self.le.setPixmap(QPixmap(fname))

在QFileDialog.getOpenFiIeNam()函数中:

  • 第一个参数用于指定父组件;
  • 第二个参数是QFileDialog对话框的标题;
  • 第三个参数是对话框显示时默认打开的目录,“.”代表程序运行目录,“/”代
    表当前盘下的根目录(在Windows、Linux下“/”就表示根目录)。需要注意
    不同平台下路径的显示方式,比如Windows平台下的C盘“C:\”等。
  • 第四个参数是对话框中文件扩展名过滤器(Filter)。比如使用“lmage files(.jpg.glf)"表示只能显示打展名为.jpg或.gif的文件。

第二个按钮使用文件对话框(QFileDialog)对象的exec0方法来选择文件,并
把所选文件的内容显示在文本编辑控件中。其核心代码如下:

 def getfiles(self):dlg = QFileDialog()dlg.setFileMode(QFileDialog.AnyFile)dlg.setFilter(QDir.Files)if dlg.exec_():filenames = dlg.selectedFiles()f = open(filenames[0], 'r')with f:data = f.read()self.contents.setText(data)

相关文章:

  • UCOS 嵌入式操作系统
  • 【深度学习】#12 计算机视觉
  • AutoGPT-Agent简述版
  • vscode中Debug c++
  • 【言语理解】逻辑填空之逻辑对应11
  • DB-MongoDB-00002--Workload Generator for MongoDB
  • 安装和升级到devExpress23.1.7
  • 工作流介绍
  • Milvus向量数据库
  • 何首乌基因组-文献精读131
  • LearnOpenGL---着色器
  • 微服务项目->在线oj系统(Java版 - 3)
  • 大模型在胫骨平台骨折预测及治疗方案制定中的应用研究
  • 网络编程-select(二)
  • 组态王|组态王中如何添加西门子1200设备
  • 【QGIS二次开发】地图编辑-04
  • Python数据可视化 - Pyecharts绘图示例
  • 【Linux网络】五种IO模型与阻塞IO
  • 【MYSQL】笔记
  • Go 后端中双 token 的实现模板
  • 国家统计局:下阶段要继续发挥宏观政策作用,促进价格合理回升
  • 竞彩湃|英超欧冠悬念持续,纽卡斯尔诺丁汉能否拿分?
  • 《掩耳盗邻》:富人劫富,是犯罪,也是赎罪?
  • 美国务卿与以色列总理通话,讨论加沙局势
  • 浙江一家长称小学老师打孩子还威胁要从3楼扔下,当地警方已立案
  • 《五行令》《攻守占》,2个月后国博见