ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PySide6(PyQT5)的QMessageBox的应用范例

PySide6(PyQT5)的QMessageBox的应用范例 QMessageBox是QT中专门设计用于显示消息给用户并获取用户响应的对话框。它通常用于显示简单的消息、警告、错误或询问用户的选择。它的基本应用见PySide6PyQT5的常用对话框类-CSDN博客这里对它的实际工程中的应用做进一步的详细记录。• 使用内置的的标准静态方法来创建对话框对于大多数的基本应用使用QMessageBox内置的的标准静态方法来创建对话框已经足够了例如 question、warning、critical 等。在静态方法中已经预置好了图标、按钮以及点击之后的返回值。• 基本的应用• 不带返回值QMessageBox.warning(None, 警告, 文件未保存)QMessageBox.warning 是QMessageBox内置的的标准静态方法它预置了一个OK按钮和一个红色感叹号图标无需对按钮和图标进行定义就可直接使用。将窗口的显示和信号连接起来from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QMessageBox class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle(QMessageBox 示例) button QPushButton(显示消息框, self) button.setGeometry(50, 50, 100, 30) button.clicked.connect(lambda: QMessageBox.warning(self, 信息提示框, 密码错误)) if __name__ __main__: app QApplication([]) window MainWindow() window.show() app.exec()• 带返回值from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QMessageBox class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle(QMessageBox 示例) button QPushButton(显示提问框, self) button.setGeometry(50, 50, 100, 30) # 使用question方法并连接到自定义槽函数以获取返回值 button.clicked.connect(self.show_question_dialog) def show_question_dialog(self): # question方法会返回一个整数代表用户的选择 result QMessageBox.question(self, 信息提示框, 这是一个提问框) if result QMessageBox.Yes: print(用户点击了是) else: print(用户点击了否) if __name__ __main__: app QApplication([]) window MainWindow() window.show() app.exec()• 深度定制如果有定制需求可以自定义QMessageBox实现一些特殊的组合和功能。• 利用QMessageBox内置的标准按钮和标准图标来定制界面import sys from PyQt5.QtWidgets import QApplication, QMessageBox def main(): app QApplication(sys.argv) # 创建一个消息框 msg_box QMessageBox() msg_box.setText(这是一个消息框) # 设置消息框的标准按钮 msg_box.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel | QMessageBox.Yes | QMessageBox.No | QMessageBox.Abort | QMessageBox.Retry | QMessageBox.Ignore) # 设置消息框的图标 msg_box.setIcon(QMessageBox.Information) # 显示消息框并获取用户的点击结果 result msg_box.exec() # 这里获取的是msg_box.exec()的返回值 # 根据用户的点击结果进行相应的处理 if result QMessageBox.Ok: print(用户点击了 Ok 按钮) elif result QMessageBox.Cancel: print(用户点击了 Cancel 按钮) elif result QMessageBox.Yes: print(用户点击了 Yes 按钮) elif result QMessageBox.No: print(用户点击了 No 按钮) elif result QMessageBox.Abort: print(用户点击了 Abort 按钮) elif result QMessageBox.Retry: print(用户点击了 Retry 按钮) elif result QMessageBox.Ignore: print(用户点击了 Ignore 按钮) if __name__ __main__: main()在上面的范例中用setStandardButtons()将内置的标准按钮设置为界面的按钮内置的标准按钮有以下种类• 内置的标准按钮种类◦ QMessageBox.Ok确定◦ QMessageBox.Cancel取消◦ QMessageBox.Yes是◦ QMessageBox.No否◦ QMessageBox.Abort终止◦ QMessageBox.Retry重试◦ QMessageBox.Ignore忽略◦ QMessageBox.Save保存◦ QMessageBox.Discard放弃还使用setIcon()设置了图标内置的标准图标有以下种类• 内置的标准图标◦ QMessageBox.Question询问用户信息包含一个问号图标。◦ QMessageBox.Information向用户提供信息使用信息图标蓝色的 i。◦ QMessageBox.Warning向用户发出警告使用黄色的感叹号图标。◦ QMessageBox.Critical用于显示严重错误使用红色的叉号图标或阻止横线。• 自定义按钮文字import sys from PySide6.QtWidgets import QApplication, QMessageBox def main(): app QApplication(sys.argv) # 创建一个消息框 msg_box QMessageBox() msg_box.setText(这是一个消息框) # 设置消息框的标准按钮 msg_box.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) # 设置按钮的文本 msg_box.button(QMessageBox.Ok).setText(确定) msg_box.button(QMessageBox.Cancel).setText(取消) # 显示消息框并获取用户的点击结果 result msg_box.exec() # 这里获取的是msg_box.exec()的返回值 # 根据用户的点击结果进行相应的处理 if result QMessageBox.Ok: print(用户点击了 确定 按钮) elif result QMessageBox.Cancel: print(用户点击了 取消 按钮) if __name__ __main__: main()• 自定义按钮图标import sys from PySide6.QtGui import QIcon from PySide6.QtWidgets import QApplication, QMessageBox def main(): app QApplication(sys.argv) # 创建一个消息框 msg_box QMessageBox() msg_box.setText(这是一个消息框) # 设置消息框的标准按钮 msg_box.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) # 设置按钮的文本 msg_box.button(QMessageBox.Ok).setText(确定) # 设置按钮的图标 msg_box.button(QMessageBox.Ok).setIcon(QIcon(/home/dy/Documents/projects/PythonProject_v2/UI_proj/SRC/alarm.svg)) msg_box.button(QMessageBox.Cancel).setText(取消) # 显示消息框并获取用户的点击结果 result msg_box.exec() # 这里获取的是msg_box.exec()的返回值 # 根据用户的点击结果进行相应的处理 if result QMessageBox.Ok: print(用户点击了 确定 按钮) elif result QMessageBox.Cancel: print(用户点击了 取消 按钮) if __name__ __main__: main()• 不使用内置的标准按钮的和图标来定制界面除了可以使用内置的标准按钮和图标来定制界面还可以使用自定义的按钮和本地图标from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QMessageBox from PySide6.QtGui import QPixmap class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle(QMessageBox 示例) self.setGeometry(100, 100, 300, 200) button QPushButton(显示消息框, self) button.setGeometry(100, 80, 100, 30) button.clicked.connect(self.show_message_box) def show_message_box(self): # 创建一个消息框 msg_box QMessageBox(self) msg_box.setWindowTitle(确认) msg_box.setText(您确定要执行此操作吗) # msg_box.setIcon(QMessageBox.Warning) pixmap QPixmap(/home/dy/Documents/projects/PythonProject_v2/UI_proj/SRC/info.svg) # 替换为你的 SVG 文件路径 msg_box.setIconPixmap(pixmap) # 设置图标 # 添加自定义按钮“确定”和“取消” btn_ok msg_box.addButton(确定, QMessageBox.AcceptRole) # 确定按钮 btn_cancel msg_box.addButton(取消, QMessageBox.RejectRole) # 取消按钮 # 显示消息框并等待用户响应 msg_box.exec() # 根据用户点击的按钮进行判断 if msg_box.clickedButton() btn_ok: print(用户点击了“确定”) else: print(用户点击了“取消”) if __name__ __main__: app QApplication([]) window MainWindow() window.show() app.exec()在这个代码中自定义了两个按钮确定和取消并且使用了设置QPixmap的方法将一个本地的svg格式图片设置为对话框的图标。当然了也可以用上面范例中的setIcon()方法对按钮的图标进行进一步的深度定制。样式表范例/* QMessageBox 全局完整样式 */ QMessageBox { background-color: #282c34; border: 1px solid #444a54; border-radius: 6px; min-width: 420px; } /* 所有内部标签图标标签、消息文本标签 */ QMessageBox QLabel { color: #e2e8f0; background-color: transparent; font-size: 14px; } /* 标题文字静态接口的标题 */ QMessageBox QLabel#qt_msgbox_label { margin: 8px 12px; } /* 图标占位标签 */ QMessageBox QLabel#qt_msgbox_icon_label { padding-left: 10px; } /* 按钮容器 QDialogButtonBox */ QMessageBox QDialogButtonBox { background-color: transparent; } /* 对话框内所有按钮 常态 */ QMessageBox QDialogButtonBox QPushButton { background-color: #3b4252; color: #eceff4; border: 1px solid #505a6e; border-radius: 4px; min-width: 80px; min-height: 28px; padding: 4px 14px; margin: 4px; } /* 按钮悬浮 */ QMessageBox QDialogButtonBox QPushButton:hover { background-color: #4c566a; border-color: #616e88; } /* 按钮按下 */ QMessageBox QDialogButtonBox QPushButton:pressed { background-color: #2e3440; } /* -------- 针对不同类型消息框差异化可选 -------- */ /* 警告弹窗 */ QMessageBox[icon4] QLabel#qt_msgbox_label { color: #ffcb6b; } /* 错误弹窗 critical */ QMessageBox[icon3] QLabel#qt_msgbox_label { color: #ff6b6b; } /* 信息弹窗 information */ QMessageBox[icon1] QLabel#qt_msgbox_label { color: #82cfff; } /* 询问弹窗 question */ QMessageBox[icon2] QLabel#qt_msgbox_label { color: #c3e88d; }
返回列表