前言
我是一个小白,看到财务大姐开发票几十行的清单一个个的敲到开票软件里太恼火了,正好在学习python就想能不能边学边做帮搞一个直接把Excel清单导入开票软件里批量开发票的工具,现在能正常使用了,但设置的消息提示框弹出的声音太烦人,在网上查了些方法,现在记录下来方便以后查找。
直接上代码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox,QCheckBox,QVBoxLayout,QMainWindow
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap
class Demo(QMainWindow):
def __init__(self):
super(Demo, self).__init__()
self.button = QPushButton("第一种弹出消息")
self.button.clicked.connect(self.show_message)
self.button2 = QPushButton("第二种弹出消息")
self.button2.clicked.connect(self.show_message2)
layout = QVBoxLayout()
layout.addWidget(self.button)
layout.addWidget(self.button2)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
def AA(self,bt):
print('按钮被点击了',bt)
print('点击的按钮是:', self.mb.clickedButton())
# clickedButton() #返回被点击的按钮
def show_message(self):
mb = QMessageBox(self) # 创建信息对话框
# 继承于QDialog,需要show,exec,open来弹出
# 默认是一个模态对话框,即使show弹出的对话框也是模态的
# mb = QMessageBox(QMessageBox.NoIcon,'对话框标题','<h2>主要标题信息</h2>',QMessageBox.Ok | QMessageBox.Discard ,self)
# 参数1 图标:
# QMessageBox.NoIcon 没有图标
# QMessageBox.Warning 警告图标
# QMessageBox.Critical 严重问题图标
# QMessageBox.Information 没有任何异常图标
# QMessageBox.Question 提问图标
# 参数2 对话框标题
# 参数3 主要标题信息--可以是富文本
# 参数4 按钮:
# QMessageBox.Ok 使用AcceptRole定义的“确定”按钮
# QMessageBox.Discard “丢弃”或“不保存”按钮,具体取决于使用DestructiveRole定义的平台
# QMessageBox.Open 使用AcceptRole定义的“打开”按钮。
# QMessageBox.Save 使用AcceptRole定义的“保存”按钮。
# QMessageBox.Cancel 使用RejectRole定义的“取消”按钮。
# QMessageBox.Close 使用RejectRole定义的“关闭”按钮。
# QMessageBox.Apply 使用ApplyRole定义的“应用”按钮。
# QMessageBox.Reset 使用ResetRole定义的“重置”按钮。
# QMessageBox.RestoreDefaults 使用ResetRole定义的“恢复默认值”按钮。
# QMessageBox.SaveAll 使用AcceptRole定义的“全部保存”按钮。
# QMessageBox.Yes 使用YesRole定义的“是”按钮。
# QMessageBox.YesToAll 使用YesRole定义的“Yes to All”按钮。
# QMessageBox.No 使用NoRole定义的“否”按钮。
# QMessageBox.Help 使用HelpRole定义的“帮助”按钮。
# QMessageBox.NoToAll 使用NoRole定义的“No to All”按钮。
# QMessageBox.Abort 使用RejectRole定义的“Abort”按钮。
# QMessageBox.Retry 使用AcceptRole定义的“重试”按钮。
# QMessageBox.Ignore 使用AcceptRole定义的“忽略”按钮。
# QMessageBox.NoButton 无效按钮。
self.mb = mb
# mb.setModal(False) #设置是否模态对话框
mb.setWindowModality(Qt.NonModal) # 设置成非模态
mb.setIcon(QMessageBox.Question) # 设置标准图标
# mb.setIconPixmap(QPixmap('./大象.png').scaled(100,100)) #用自定义图像做图标
mb.setTextFormat(Qt.AutoText) # 设置文本格式
# Qt.PlainText 普通文本
# Qt.RichText 富文本--默认
# Qt.AutoText 自动识别
mb.setText('<h2>我是主要标题信息</h2>') # 设置主要标题信息---支持富文本
mb.setInformativeText('<h3>提示信息</h3>') # 设置提示信息---支持富文本
# informativeText() 返回提示文本
mb.setCheckBox(QCheckBox('复选框', mb)) # 设置复选框
mb.setDetailedText('我是详细文本') # 设置详细文本---不支持富文本
# 按钮:
mb.setStandardButtons(QMessageBox.Yes) # 添加标准按钮
# 设置了Yes和No按钮
# 按钮类型看上面
btn = QPushButton('按钮1', mb)
mb.addButton(btn, QMessageBox.YesRole) # 添加自定义按钮--方式一
btn1 = mb.addButton('按钮2', QMessageBox.NoRole) # 方式二
# 参数2 按钮角色:
# YesRole 按钮是一个“是”的按钮
# InvalidRole 该按钮无效
# AcceptRole 单击该按钮将使对话框被接受(例如,确定)
# RejectRole 单击该按钮会导致拒绝对话框(例如取消)
# DestructiveRole 单击该按钮会导致破坏性更改(例如,对于Discarding Changes)并关闭对话框
# ActionRole 单击该按钮将导致更改对话框中的元素
# HelpRole 可以单击该按钮以请求帮助。
# NoRole 按钮是一个“无”按钮。
# ApplyRole 该按钮应用当前更改。
# ResetRole 该按钮将对话框的字段重置为默认值。
# 返回值:按钮对象
btn5 = mb.button(QMessageBox.Yes) # 返回标准按钮的对象
s = mb.buttonRole(btn1) # 返回按钮的角色对象
# mb.removeButton(btn1) #移除按钮
mb.setDefaultButton(btn1) # 设置自定义默认按钮
mb.setDefaultButton(QMessageBox.Yes) # 设置标准默认按钮
s = mb.defaultButton() # 返回默认按钮
mb.setEscapeButton(btn1) # 设置ESC所对应的按钮--自定义
mb.setEscapeButton(QMessageBox.Yes) # 设置ESC所对应的按钮--标准按钮
mb.setTextInteractionFlags(Qt.NoTextInteraction) # 设置文本交互标志--针对主要标题信息
# Qt.TextEditorInteraction 允许文本交互---允许编辑
# Qt.NoTextInteraction 不允许交互
# 信号:
mb.buttonClicked.connect(self.AA) # 按钮被点击时发出信号
# 会把被点击的按钮对象传递给槽函数
print(s)
mb.show()
def show_message2(self):
message = '<p>检测到还没有商品编码信息!</p>' \
'<p>请选择【商品编码】选项卡下部的【导入商品编码】导入。</p>'
MsgBox = QMessageBox()
MsgBox.setStyleSheet("QLabel#qt_msgbox_label{background-color: transparent;min-width: 400px;padding-left: 0px;}"
"QPushButton{min-width:85px;min-height:25px; border: 1px solid green;border-radius:5px;}"
"QPushButton:hover{color:white;background:#6DDF6D;}" # background-color: #298DFF;color: #F2F2F2;
"QMessageBox{color: #298DFF;background-color: #F2F2F2; border:1px solid #CCFFF6;border-radius:3px;}")
MsgBox.setIconPixmap(QPixmap(':/img/pic/warning.png').scaled(50, 50)) # 自定义图标后弹出就没有声音了
# MsgBox.setIcon(QMessageBox.Information)
MsgBox.setWindowTitle('提示')
MsgBox.setWindowFlags(Qt.Drawer) # 去掉左上角图标
yesButton = MsgBox.addButton("确定", QMessageBox.ActionRole)
noButton = MsgBox.addButton("退出", QMessageBox.ActionRole)
# MsgBox.setDefaultButton(noButton) # 设置默认被选中的按钮.
# cancelButton = MsgBox.addButton("cancel", QMessageBox.ActionRole)
MsgBox.setText(message)
MsgBox.exec_()
button = MsgBox.clickedButton()
if button == yesButton:
print('点了确定按钮')
else:
print('点了退出按钮')
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = Demo()
demo.show()
sys.exit(app.exec_())
第一种方法参考的是: www.cnblogs.com/liming19680104/p/10356966.html