Python学习笔记-PyQt6消息窗

news/2024/11/20 23:39:59/

对话框是界面编程中重要的窗体,一般用于提示或者一些其他特定操作。

一、使用QDialog显示通用消息框

直接使用QDialog类,可以及通过对话框进行通用对话框显示,亦可以通过自定义设置自己需要的对话框。

# _*_ coding:utf-8 _*_import sysfrom PyQt6.QtWidgets import QWidget
from PyQt6.QtWidgets import QApplication
from PyQt6.QtWidgets import QMainWindow
from PyQt6.QtWidgets import QVBoxLayout
from PyQt6.QtWidgets import QHBoxLayout
from PyQt6.QtWidgets import QPushButton
from PyQt6.QtWidgets import QDialog
from PyQt6.QtGui import QIcon
from PyQt6.QtCore import Qtclass MainWindowView(QMainWindow):"""主窗体界面"""def __init__(self):"""构造函数"""super().__init__()self.setWindowTitle("MainWindow")self.setWindowIcon(QIcon(r"./res/folder_pictures.ico"))self.resize(300, 200)self.setMinimumSize(600, 400)self.center()self.initui()def initui(self):"""初始函数"""self.vboxlayout = QVBoxLayout(self)self.main_widget = QWidget()self.main_widget.setLayout(self.vboxlayout)self.setCentralWidget(self.main_widget)self.hboxlayout = QHBoxLayout(self)self.btn = QPushButton(self)self.btn.setText("弹出对话框")self.btn.move(100,100)self.btn.clicked.connect(self.show_dialog)def center(self):"""居中显示"""win_rect = self.frameGeometry()  # 获取窗口矩形screen_center = self.screen().availableGeometry().center()  # 屏幕中心win_rect.moveCenter(screen_center)      # 移动窗口矩形到屏幕中心self.move(win_rect.center())         # 移动窗口与窗口矩形重合def show_dialog(self):dialog = QDialog()button = QPushButton("确定", dialog)button.clicked.connect(dialog.close)button.move(50,50)dialog.setWindowTitle("QDialog")dialog.setWindowModality(Qt.WindowModality.ApplicationModal)dialog.exec()if __name__ == "__main__":app = QApplication(sys.argv)view = MainWindowView()view.show()sys.exit(app.exec())

结果:

点击按钮可以弹出对话框,可以添加对应的按钮关联信号进行窗体关闭或控制。

二、使用QMessageBox显示不同的对话框

QMessageBox是通用的消息对话框,包括如下多种形式,不同的对话框有不同的图标和按钮,还可以根据自己需要微调样式。

# _*_ coding:utf-8 _*_import sysfrom PyQt6.QtWidgets import QWidget
from PyQt6.QtWidgets import QApplication
from PyQt6.QtWidgets import QMainWindow
from PyQt6.QtWidgets import QVBoxLayout
from PyQt6.QtWidgets import QPushButton
from PyQt6.QtWidgets import QMessageBox
from PyQt6.QtGui import QIcon
from PyQt6.QtCore import Qtclass DemoQMessageBox(QMainWindow):"""主窗体界面"""def __init__(self):"""构造函数"""super().__init__()self.setWindowTitle("MainWindow")self.setWindowIcon(QIcon(r"./res/20 (3).ico"))self.resize(300, 200)self.setMinimumSize(600, 400)self.center()self.initui()def initui(self):"""初始函数"""self.vboxlayout = QVBoxLayout(self)self.vboxlayout.setAlignment(Qt.AlignmentFlag.AlignCenter)self.main_widget = QWidget()self.main_widget.setLayout(self.vboxlayout)self.setCentralWidget(self.main_widget)btns = ["关于对话框", "错误对话框", "警告对话框", "提问对话框", "消息对话框",]for btnname in btns:"""添加button"""btn = QPushButton(btnname)self.vboxlayout.addWidget(btn)btn.clicked.connect(self.show_dialog)def center(self):"""居中显示"""win_rect = self.frameGeometry()  # 获取窗口矩形screen_center = self.screen().availableGeometry().center()  # 屏幕中心win_rect.moveCenter(screen_center)      # 移动窗口矩形到屏幕中心self.move(win_rect.center())         # 移动窗口与窗口矩形重合def show_dialog(self):if type(self.sender()) is QPushButton:btn_text = self.sender().text()if btn_text == "关于对话框":QMessageBox.about(self, "关于", "这是关与对话框")elif btn_text == "错误对话框":QMessageBox.critical(self,"错误","程序发生了错误!",QMessageBox.StandardButton.Ignore | QMessageBox.StandardButton.Abort | QMessageBox.StandardButton.Retry,QMessageBox.StandardButton.Retry)elif btn_text == "警告对话框":QMessageBox.warning(self, "警告", "余量不足。", QMessageBox.StandardButton.Ok, QMessageBox.StandardButton.Ok)elif btn_text == "提问对话框":QMessageBox.question(self, "提问", "是否取消" ,QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No,QMessageBox.StandardButton.Yes)elif btn_text == "消息对话框":QMessageBox.information(self, "消息", "这是通知消息", QMessageBox.StandardButton.Ok, QMessageBox.StandardButton.Ok)if __name__ == "__main__":app = QApplication(sys.argv)view = DemoQMessageBox()view.show()sys.exit(app.exec())

结果:

点击不同按钮,显示不同的消息窗口:

关于对话框:

错误对话框:

警告对话框:

提问对话框:

消息对话框:

三、输入信息窗

输入对话框,用于弹窗获取用户的输入信息,包含输入列表,输入文本,输入数字等方式。

  • QInputDialog.getItem(self,"获取选项消息框", "名字列表", items),返回值Tuple[str, bool]

  • QInputDialog.getText(self,"获取文本消息框", "请输入文本信息:"),返回值Tuple[str, bool]

  • QInputDialog.getInt(self,"获取整数消息框", "请输入整数:"),返回值Tuple[int, bool]

  • QInputDialog.getMultiLineText(parent: QWidget, title: str, label: str, text: str = ..., flags: QtCore.Qt.WindowType = ..., inputMethodHints: QtCore.Qt.InputMethodHint = ...) -> typing.Tuple[str, bool]

  • QInputDialog.getDouble(parent: QWidget, title: str, label: str, value: float = ..., min: float = ..., max: float = ..., decimals: int = ..., flags: QtCore.Qt.WindowType = ..., step: float = ...) -> typing.Tuple[float, bool]

示例:

# _*_ coding:utf-8 _*_import sys
from PyQt6.QtWidgets import QApplication
from PyQt6.QtWidgets import QWidget
from PyQt6.QtWidgets import QMainWindow
from PyQt6.QtWidgets import QFormLayout
from PyQt6.QtWidgets import QPushButton
from PyQt6.QtWidgets import QLineEdit
from PyQt6.QtWidgets import QInputDialog
from PyQt6.QtGui import QColor
from PyQt6.QtGui import QIcon
from PyQt6.QtCore import Qtclass QInputDialogDemoView(QMainWindow):"""输入消息框类"""def __init__(self):"""构造函数"""super().__init__()self.setWindowTitle("MainWindow")self.setWindowIcon(QIcon(r"./res/20 (3).ico"))self.resize(200, 100)self.center()self.initui()def center(self):"""居中显示"""win_rect = self.frameGeometry()  # 获取窗口矩形screen_center = self.screen().availableGeometry().center()  # 屏幕中心# 移动窗口矩形到屏幕中心win_rect.moveCenter(screen_center)# 移动窗口与窗口矩形重合self.move(win_rect.center())def initui(self):"""初始函数"""# 创建表单布局作为底层布局self.formlayout = QFormLayout(self)self.formlayout.setAlignment(Qt.AlignmentFlag.AlignCenter)self.main_widget = QWidget()self.main_widget.setLayout(self.formlayout)self.setCentralWidget(self.main_widget)# 添加获取选项按钮self.btn_getitem = QPushButton("Get Item")self.btn_getitem.clicked.connect(self.get_item)self.ledit_getitem = QLineEdit()self.formlayout.addRow(self.btn_getitem, self.ledit_getitem)# 添加获取文本按钮self.btn_gettext = QPushButton("Get Text")self.btn_gettext.clicked.connect(self.get_text)self.ledit_gettext = QLineEdit()self.formlayout.addRow(self.btn_gettext, self.ledit_gettext)# 添加获取整数按钮self.btn_getint = QPushButton("Get Int")self.btn_getint.clicked.connect(self.get_int)self.ledit_getint = QLineEdit()self.formlayout.addRow(self.btn_getint, self.ledit_getint)def get_item(self):"""获取选项槽"""items = ("小张", "小明", "小李", "小朱")item,result = QInputDialog.getItem(self,"获取选项消息框", "名字列表", items)print(f"item : {item}, ok : {result}, tpye : {type(result)}")if item and result:self.ledit_getitem.setText(item)def get_text(self):"""获取文本槽"""text,result = QInputDialog.getText(self,"获取文本消息框", "请输入文本信息:")print(f"item : {text}, ok : {result}, tpye : {type(result)}")if text and result:self.ledit_gettext.setText(text)def get_int(self):"""获取文本槽"""num,result = QInputDialog.getInt(self,"获取整数消息框", "请输入整数:")print(f"item : {num}, ok : {result}, tpye : {type(result)}")if num and result:self.ledit_getint.setText(str(num))if __name__ == "__main__":"""主程序运行"""app = QApplication(sys.argv)window = QInputDialogDemoView()window.show()sys.exit(app.exec())

结果:

主界面:

输入选项:

输入文本:

输入整数:

四、字体对话框

字体对话框(QFontDialog)可以用来交互选择系统中的字体然后通过返回的QFont类型数据来设置相关的字体。

示例:

# _*_ coding:utf-8 _*_import sys
from PyQt6.QtWidgets import QApplication
from PyQt6.QtWidgets import QWidget
from PyQt6.QtWidgets import QMainWindow
from PyQt6.QtWidgets import QFontDialog
from PyQt6.QtWidgets import QPushButton
from PyQt6.QtWidgets import QLabel
from PyQt6.QtWidgets import QVBoxLayout
from PyQt6.QtGui import QFont
from PyQt6.QtCore import Qt class QFontDialogDemo(QMainWindow):"""字体对话框"""def __init__(self):"""构造函数"""super(QFontDialogDemo,self).__init__()self.init_ui()def init_ui(self):self.setWindowTitle("QFontDialogDemo")self.resize(300, 200)# 获取中央控件self.centralwidget = QWidget()self.setCentralWidget(self.centralwidget)# 设置布局self.vboxlayout = QVBoxLayout()self.vboxlayout.setAlignment(Qt.AlignmentFlag.AlignCenter)self.centralwidget.setLayout(self.vboxlayout)# 添加标签和按钮self.label = QLabel("字体样式展示")self.vboxlayout.addWidget(self.label)self.label_fonttype = QLabel("字体类型")self.vboxlayout.addWidget(self.label_fonttype)self.btn_showfontdialog = QPushButton("选择字体")self.btn_showfontdialog.clicked.connect(self.getfont)self.vboxlayout.addWidget(self.btn_showfontdialog)def getfont(self):"""获取字体"""font, ok = QFontDialog.getFont()if ok :self.label.setFont(font)self.label_fonttype.setText(f"字体名称:{font.family()},样式:{font.styleName()},字号:{font.pointSize()}")if __name__ == "__main__":"""主程序运行"""app = QApplication(sys.argv)main = QFontDialogDemo()main.show()sys.exit(app.exec())

结果:

界面样式:

字体弹窗:

设置字体后:

五、颜色对话框

通过颜色对话框选择颜色,然后给给控件设置对应的颜色。

格式:

color, ok = QColorDialog.getColor()

示例:

# _*_ coding:utf-8 _*_import sys
from PyQt6.QtWidgets import QApplication
from PyQt6.QtWidgets import QWidget
from PyQt6.QtWidgets import QMainWindow
from PyQt6.QtWidgets import QColorDialog
from PyQt6.QtWidgets import QPushButton
from PyQt6.QtWidgets import QLabel
from PyQt6.QtWidgets import QVBoxLayout
from PyQt6.QtGui import QPalette
from PyQt6.QtCore import Qtclass QColorDialogDemo(QMainWindow):"""字体对话框"""def __init__(self):"""构造函数"""super(QColorDialogDemo, self).__init__()self.init_ui()def init_ui(self):self.setWindowTitle("QColorDialogDemo")self.resize(300, 200)# 获取中央控件self.centralwidget = QWidget()self.setCentralWidget(self.centralwidget)# 设置布局self.vboxlayout = QVBoxLayout()self.vboxlayout.setAlignment(Qt.AlignmentFlag.AlignCenter)self.centralwidget.setLayout(self.vboxlayout)# 添加标签和按钮self.label = QLabel("字体颜色展示")self.vboxlayout.addWidget(self.label)self.label_fonttype = QLabel("颜色:")self.vboxlayout.addWidget(self.label_fonttype)self.btn_showcolordialog = QPushButton("选择字体颜色")self.btn_showcolordialog.clicked.connect(self.getcolor)self.vboxlayout.addWidget(self.btn_showcolordialog)self.btn_showcolordialog_background = QPushButton("选择背景颜色")self.btn_showcolordialog_background.clicked.connect(self.getcolor_background)self.vboxlayout.addWidget(self.btn_showcolordialog_background)def getcolor(self):"""获取颜色"""color = QColorDialog.getColor()palette = QPalette()palette.setColor(QPalette.ColorRole.WindowText, color)self.label.setPalette(palette)self.label_fonttype.setText("""颜色:{0:x}""".format(color.rgb()))def getcolor_background(self):"""获取背景颜色"""color = QColorDialog.getColor()palette = QPalette()palette.setColor(QPalette.ColorRole.Window, color)self.label.setAutoFillBackground(True)self.label.setPalette(palette)self.label_fonttype.setText("""颜色:{0:x}""".format(color.rgb()))if __name__ == "__main__":"""主程序运行"""app = QApplication(sys.argv)main = QColorDialogDemo()main.show()sys.exit(app.exec())

结果:

界面:

调色板:

修改颜色字体:

修改背景颜色:


http://www.ppmy.cn/news/12494.html

相关文章

Linux 中断子系统(八):中断处理流程

1、上层中断处理 系统初始化时,已经建立起 硬件中断号 和 软件中断号的 映射表。 中断注册时,我们需要先从设备树中获取硬件中断号,然后调用 API 将硬件中断号转换为软件中断号,根据软件终端号 irq 找到对应的 irq_desc,并将中断处理函数添加到 irq_desc 中(也就是 irq…

【C语言进阶】使用“动态内存文件处理”实现进阶版通讯录

目录 前言 改进后的优势 一、test.c 二、contact.h 三、contact.c 1.加载通讯录函数load_contact 2、将数据保存到文件save_contact函数 3、初始化通讯录init_contact函数 4、扩容check_full函数 5、销毁通讯录destory_contact函数 6、其余函数 四、完整源码 总结 …

java伪随机数生成器

关于随机数的基本概念 1、对随机数性质分类: 随机性:符合该性质的叫弱伪随机数。这种随机数仅可以用于一般应用,无法用在密码学,例如java中的java.util.Random类不可预测性:符合该性质的叫强伪随机数。在密码学中&am…

Redis 实现用户积分和积分排行榜微服务优化

文章目录修改添加积分方法积分排行控制层redis实现积分排行业务逻辑层Redis排行榜测试使用 JMeter 压测对比在之前的博客中我通过 MySQL数据库实现了积分和积分排行榜功能,在数据量大和并发量高的情况下会有以下缺点:SQL编写复杂;数据量大&am…

Pytorch优化器全总结(四)常用优化器性能对比 含代码

目录 写在前面 一、优化器介绍 1.SGDMomentum 2.Adagrad 3.Adadelta 4.RMSprop 5.Adam 6.Adamax 7.AdaW 8.L-BFGS 二、优化器对比 优化器系列文章列表 Pytorch优化器全总结(一)SGD、ASGD、Rprop、Adagrad Pytorch优化器全总结(二…

Python【3】:格式化输出

文章目录前言1. 通过 %\%% 实现1.1. 语法1.2. 常见格式化符号1.3. 格式化操作符辅助指令2. 通过 format() 函数实现2.1. 语法2.2. 用法2.2.1. 基本用法2.2.2. 数字格式化前言 在做题与实际应用中,经常会出现需要格式化(输出)字符串的情况&am…

走近软件生态系统

生态系统(Ecosystem)原本是一个生物学术语,意思是由一些生命体相互依存、相互制约而形成的大系统,就像我们学生时代在生物学课堂上学到的那样。隐喻无处不在,人们把这个术语移植到了 IT 领域中来,比如我们常…

【阶段四】Python深度学习09篇:深度学习项目实战:循环神经网络处理时序数据项目实战:CNN和RNN组合模型

本篇的思维导图: 项目背景 时间序列数据集中的所有数据都伴随着一个时戳,比如股票、天气数据。这个数据集,是科学家们多年间用开普勒天文望远镜观察并记录下来的银河系中的一些恒星的亮度。广袤的宇宙,浩瀚的星空在过去很长一段时间里,人类是没有办法证明系外行星…