一、普通对话框
(一)简介
QDialog是对话框窗口的基类对话框,主要用来执行短期任务或者与用户进行互动,它可以是模态的,也可以是非模态的。对话框没有菜单栏、工具栏、状态栏。模态指的是窗口打开的时候,它底下的父窗口是不可操作的;非模态就是当我们打开一个子窗口的时候,其下面的窗口也是可以操作的。对话框可以衍生为颜色选择对话框(QColorDialog)、字体对话框(DFontDialog)、文件选择对话框(DFileDialog)、输入对话框(DInputDialog)、消息确认框(QMessageBox)、进度条对话框(QProgressDialog)等等。继承关系如下:
对于主窗口的选择如果包含状态栏、工具栏、菜单栏等可以使用QMainWindow。如果只是对话框形式不包含以上几种就可以使用QDialog。如果不确定或者说他会作为顶层窗口(没有父窗口的窗口就是顶层窗口)或者嵌入到其他窗口中,那么就可以使用最根本的基类QWidget类。
QWidget控件和窗口的父类 ,自由度高(什么都东西都没有),没有划分菜单、工具栏、状态栏、主窗口 等区域
QMainWindow是QWidget
的子类,包含菜单栏,工具栏,状态栏,标题栏等,中间部分则为主窗口区域。
二、消息对话框(称为弹窗更妥)
QMessageBox提供两套接口来实现,一种是static functions(静态方法调用),另外一种 the property-base API(基于属性的API)。直接调用静态方法是一种比较简单的途径,但是没有基于属性API的方式灵活。在QT的官网上推荐使用the property-base API。
(一)API
1.创建消息对话框
创建消息对话框共两个基本步骤,其余均为中间操作:
# 1.创建消息对话框
messageBox=QMessageBox()
# 2.执行提示框并等待用户操作。
messageBox.exec_()
2.方法和属性
(1)设置标题
messageBox.setWindowTitle()
(2)设置提示框的文本内容。
messageBox.setText()
(3)设置标准按钮
messageBox.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
# 多个标准按钮之间用"|"拼接
'''
参数值及其含义:
QMessageBox.Ok # 使用AcceptRole定义的“确定”按钮。
QMessageBox.Open # 使用AcceptRole定义的“打开”按钮。
QMessageBox.Save # 使用AcceptRole定义的“保存”按钮。
QMessageBox.Cancel # 使用RejectRole定义的“取消”按钮。
QMessageBox.Close # 使用RejectRole定义的“关闭”按钮。
QMessageBox.Discard # “丢弃”或“不保存”按钮,具体取决于使用DestructiveRole定义的平台。
QMessageBox.Apply # 使用ApplyRole定义的“应用”按钮。
QMessageBox.Reset # 使用ResetRole定义的“重置”按钮。
QMessageBox.RestoreDefaults # 使用ResetRole定义的“恢复默认值”按钮。
QMessageBox.Help # 使用HelpRole定义的“帮助”按钮。
QMessageBox.SaveAll # 使用AcceptRole定义的“全部保存”按钮。
QMessageBox.Yes # 使用YesRole定义的“是”按钮。
QMessageBox.YesToAll # 使用YesRole定义的“Yes to All”按钮。
QMessageBox.No # 使用NoRole定义的“否”按钮。
QMessageBox.NoToAll # 使用NoRole定义的“No to All”按钮。
QMessageBox.Abort # 使用RejectRole定义的“Abort”按钮。
QMessageBox.Retry # 使用AcceptRole定义的“重试”按钮。
QMessageBox.Ignore # 使用AcceptRole定义的“忽略”按钮。
QMessageBox.NoButton # 无效按钮。
'''
(4)获取标准按钮
standardButton()
(5)获取某个按钮
参数值的同方法(3)
messageBox.button()
(6)获取所有按钮,返回一列表,元素全部为按钮对象
messageBox.buttons()
(7)设置图标
messageBox.setIcon()
'''
参数值的含义:
内置图标
QMessageBox.Noicon # 消息框没有任何图标
QMessageBox.Question # 一个图标,表示该消息正在提问
QMessageBox.Information # 一个图标,表示该消息没有任何异常
QMessageBox.Warning # 一个图标,表示改消息是一个警告
QMessageBox.Critical # 一个图标,表示该消息代表一个严重问题、
自定义图标
setIconPixmap(QPixmap)
'''
(8)设置自定义图标
messageBox.setIconPixmap()
示例代码:
pixMap=QPixmap('狼.jpeg')
pixMap=pixMap.scaled(100,80,Qt.IgnoreAspectRatio)
messageBox.setIconPixmap(pixMap)
(9)获取自定义图标对象
messageBox.iconPixmap()
(10)设置提示文本和获取提示文本
messageBox.setInformativeText(str) # 设置提示文本,接受富文本
messageBox.informativeText()-> str # 获取提示文本内容
(11)置详细文本和获取详细文本
messageBox.setDetailedText(self, str) # 设置详细文本,不接受富文本
messageBox.detailedText()->str # 获取详细文本内容
(12)设置复选框和获取复选框
messageBox.setCheckBox(self, QCheckBox) # 设置复选框
messageBox.checkBox(self)->QCheckBox # 获取复选框,返回QCheckBox对象
(13)执行提示框并等待用户操作
返回值是一组数字,表示某个按钮,由此可见按钮的名称同样可以用数字设置,有空时可以研究一下。
messageBox.exec_()
3.信号
buttonClicked(QAbstractButton button) # 按钮被点击时发射该信号,传递被点击的按钮对象
4.代码
(1)练习代码
结合学习资料自己编写的代码。
import sys, os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
'''
学习资料来源:https://blog.csdn.net/weixin_50296259/article/details/130673633?spm=1001.2014.3001.5506
'''
class DemoScrollArea(QWidget):
def __init__(self, parent=None):
super(DemoScrollArea, self).__init__(parent)
self.setUI()
def setUI(self):
MainLay=QVBoxLayout()
self.setLayout(MainLay)
HLay1=QHBoxLayout()
HLay2 = QHBoxLayout()
HLay3 = QHBoxLayout()
HLay4 = QHBoxLayout()
HLay5 = QHBoxLayout()
MainLay.addLayout(HLay1)
MainLay.addLayout(HLay2)
MainLay.addLayout(HLay3)
MainLay.addLayout(HLay4)
MainLay.addLayout(HLay5)
b1 = QPushButton('创建对话框')
b2 = QPushButton('设置标题')
b3 = QPushButton('设置内容主要标题')
b4 = QPushButton('设置标准按钮')
b5 = QPushButton('获取标准按钮')
b6 = QPushButton('设置按钮名称为汉字')
b7 = QPushButton('获取所有按钮')
b8 = QPushButton('设置图标')
b9 = QPushButton('设置自定义图标')
b10 = QPushButton('获取自定义图标对象')
b11 = QPushButton('设置提示文本')
b12 = QPushButton('设置详细文本')
b13 = QPushButton('修改提示文本按钮为汉字')
b14 = QPushButton('设置复选框')
b15 = QPushButton('点击标准按钮执行相关操作')
b1.clicked.connect(self.function1)
b2.clicked.connect(self.function2)
b3.clicked.connect(self.function3)
b4.clicked.connect(self.function4)
b5.clicked.connect(self.function5)
b6.clicked.connect(self.function6)
b7.clicked.connect(self.function7)
b8.clicked.connect(self.function8)
b9.clicked.connect(self.function9)
b10.clicked.connect(self.function10)
b11.clicked.connect(self.function11)
b12.clicked.connect(self.function12)
b13.clicked.connect(self.function13)
b14.clicked.connect(self.function14)
b15.clicked.connect(self.function15)
HLay1.addWidget(b1)
HLay1.addWidget(b2)
HLay1.addWidget(b3)
HLay2.addWidget(b4)
HLay2.addWidget(b5)
HLay2.addWidget(b6)
HLay3.addWidget(b7)
HLay3.addWidget(b8)
HLay3.addWidget(b9)
HLay4.addWidget(b10)
HLay4.addWidget(b11)
HLay4.addWidget(b12)
HLay5.addWidget(b13)
HLay5.addWidget(b14)
HLay5.addWidget(b15)
def function1(self):
messageBox=QMessageBox()
messageBox.exec_()
pass
def function2(self):
messageBox=QMessageBox()
messageBox.setWindowTitle('询问')
messageBox.exec_()
def function3(self):
messageBox=QMessageBox()
messageBox.setWindowTitle('询问')
messageBox.setText('是否需要确认员工信息输入正确性?')
messageBox.exec_()
def function4(self):
messageBox=QMessageBox()
messageBox.setWindowTitle('询问')
messageBox.setText('是否需要确认员工信息输入正确性?')
messageBox.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
messageBox.exec_()
pass
def function5(self):
messageBox=QMessageBox()
messageBox.setWindowTitle('询问')
messageBox.setText('是否需要确认员工信息输入正确性?')
messageBox.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
bt=messageBox.button(QMessageBox.Yes)
print(bt)
messageBox.exec_()
def function6(self):
messageBox=QMessageBox()
messageBox.setWindowTitle('询问')
messageBox.setText('是否需要确认员工信息输入正确性?')
messageBox.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
bt1 = messageBox.button(QMessageBox.Yes)
bt1.setText('是')
bt2 = messageBox.button(QMessageBox.No)
bt2.setText('否')
messageBox.exec_()
pass
def function7(self):
messageBox=QMessageBox()
messageBox.setWindowTitle('询问')
messageBox.setText('是否需要确认员工信息输入正确性?')
messageBox.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
bt_list=messageBox.buttons()
print(bt_list)
messageBox.exec_()
def function8(self):
messageBox=QMessageBox()
messageBox.setWindowTitle('询问')
messageBox.setText('是否需要确认员工信息输入正确性?')
messageBox.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
bt1 = messageBox.button(QMessageBox.Yes)
bt1.setText('是')
bt2 = messageBox.button(QMessageBox.No)
bt2.setText('否')
messageBox.setIcon(QMessageBox.Question)
messageBox.exec_()
def function9(self):
messageBox=QMessageBox()
messageBox.setWindowTitle('询问')
messageBox.setText('是否需要确认员工信息输入正确性?')
messageBox.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
bt1 = messageBox.button(QMessageBox.Yes)
bt1.setText('是')
bt2 = messageBox.button(QMessageBox.No)
bt2.setText('否')
pixMap=QPixmap('狼.jpeg')
pixMap=pixMap.scaled(int(pixMap.width()*0.05),int(pixMap.height()*0.05),Qt.IgnoreAspectRatio)
messageBox.setIconPixmap(pixMap)
messageBox.exec_()
def function10(self):
messageBox=QMessageBox()
messageBox.setWindowTitle('询问')
messageBox.setText('是否需要确认员工信息输入正确性?')
messageBox.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
bt1 = messageBox.button(QMessageBox.Yes)
bt1.setText('是')
bt2 = messageBox.button(QMessageBox.No)
bt2.setText('否')
pixMap=QPixmap('狼.jpeg')
pixMap=pixMap.scaled(int(pixMap.width()*0.05),int(pixMap.height()*0.05),Qt.IgnoreAspectRatio)
messageBox.setIconPixmap(pixMap)
print(messageBox.iconPixmap())
messageBox.exec_()
def function11(self):
messageBox=QMessageBox()
messageBox.setWindowTitle('询问')
messageBox.setText('是否需要确认员工信息输入正确性?')
messageBox.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
bt1 = messageBox.button(QMessageBox.Yes)
bt1.setText('是')
bt2 = messageBox.button(QMessageBox.No)
bt2.setText('否')
pixMap=QPixmap('狼.jpeg')
pixMap=pixMap.scaled(int(pixMap.width()*0.05),int(pixMap.height()*0.05),Qt.IgnoreAspectRatio)
messageBox.setIconPixmap(pixMap)
messageBox.setInformativeText('如果输入错误员工信息,会出现工资发放错误!')
messageBox.exec_()
def function12(self):
messageBox=QMessageBox()
messageBox.setWindowTitle('询问')
messageBox.setText('是否需要确认员工信息输入正确性?')
messageBox.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
bt1 = messageBox.button(QMessageBox.Yes)
bt1.setText('是')
bt2 = messageBox.button(QMessageBox.No)
bt2.setText('否')
pixMap=QPixmap('狼.jpeg')
pixMap=pixMap.scaled(int(pixMap.width()*0.05),int(pixMap.height()*0.05),Qt.IgnoreAspectRatio)
messageBox.setIconPixmap(pixMap)
messageBox.setInformativeText('如果输入错误员工信息,会出现工资发放错误!')
messageBox.setDetailedText('2018年行政部小张,员工信息输入错误,导致工资多发了8万多元.')
messageBox.exec_()
def function13(self):
messageBox=QMessageBox()
messageBox.setWindowTitle('询问')
messageBox.setText('是否需要确认员工信息输入正确性?')
messageBox.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
bt1 = messageBox.button(QMessageBox.Yes)
bt1.setText('是')
bt2 = messageBox.button(QMessageBox.No)
bt2.setText('否')
pixMap=QPixmap('狼.jpeg')
pixMap=pixMap.scaled(int(pixMap.width()*0.05),int(pixMap.height()*0.05),Qt.IgnoreAspectRatio)
messageBox.setIconPixmap(pixMap)
messageBox.setInformativeText('如果输入错误员工信息,会出现工资发放错误!')
messageBox.setDetailedText('2018年行政部小张,员工信息输入错误,导致工资多发了8万多元.')
messageBox.buttons()[0].setText('显示/隐藏')
messageBox.exec_()
def function14(self):
messageBox=QMessageBox()
messageBox.setWindowTitle('询问')
messageBox.setText('是否需要确认员工信息输入正确性?')
messageBox.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
bt1 = messageBox.button(QMessageBox.Yes)
bt1.setText('是')
bt2 = messageBox.button(QMessageBox.No)
bt2.setText('否')
messageBox.setIcon(QMessageBox.Question)
checBox=QCheckBox()
messageBox.setCheckBox(checBox)
messageBox.exec_()
def function15(self):
messageBox=QMessageBox()
messageBox.setWindowTitle('询问')
messageBox.setText('是否需要确认员工信息输入正确性?')
messageBox.setStandardButtons(QMessageBox.Yes|QMessageBox.No)
bt1 = messageBox.button(QMessageBox.Yes)
bt1.setText('是')
bt2 = messageBox.button(QMessageBox.No)
bt2.setText('否')
messageBox.setIcon(QMessageBox.Question)
ueser_select=messageBox.exec_()
if ueser_select==QMessageBox.Yes:
print('用户选择了"是"')
else:
print('用户选择了"否"')
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoScrollArea()
window.show()
sys.exit(app.exec())
(二)静态方法
1.语法总结
除了关于对话框没有按钮,其他对话框都有按钮
# 关于对话框
about(QWidget, str, str)
# 关于Qt的对话框
aboutQt(QWidget, title:str='')
# 错误消息提示对话框,返回用户点击的按钮
critical(QWidget, str, str, buttons: Union[QMessageBox.StandardButtons, QMessageBox.StandardButton] = QMessageBox.Ok, defaultButton: QMessageBox.StandardButton = QMessageBox.NoButton) -> QMessageBox.StandardButton
# 普通消息提示对话框,返回用户点击的按钮
information(QWidget, str, str, buttons: Union[QMessageBox.StandardButtons, QMessageBox.StandardButton] = QMessageBox.Ok, defaultButton: QMessageBox.StandardButton = QMessageBox.NoButton) -> QMessageBox.StandardButton
# 疑问消息提示对话框,返回用户点击的按钮
question(QWidget, str, str, buttons: Union[QMessageBox.StandardButtons, QMessageBox.StandardButton] = QMessageBox.StandardButtons(QMessageBox.Yes|QMessageBox.No), defaultButton: QMessageBox.StandardButton = QMessageBox.NoButton) -> QMessageBox.StandardButton
# 警告消息提示对话框,返回用户点击的按钮
warning(QWidget, str, str, buttons: Union[QMessageBox.StandardButtons, QMessageBox.StandardButton] = QMessageBox.Ok, defaultButton: QMessageBox.StandardButton = QMessageBox.NoButton) -> QMessageBox.StandardButton
2.示例代码
(1)关于对话框
QMessageBox.about(self,'关于','不可以为空值')
(2)错误对话框
QMessageBox.critical(self,'错误','不可以为空值',QMessageBox.Yes|QMessageBox.No)
(3)提示对话框
QMessageBox.information(self,'问题','不可以为空值',QMessageBox.Yes|QMessageBox.No)
(4)问题对话框
QMessageBox.question(self,'问题','不可以为空值',QMessageBox.Yes|QMessageBox.No)
(5)警告对话框
QMessageBox.warning(self,'警告','不可以为空值',QMessageBox.Yes|QMessageBox.No)
3.代码:
(1)课堂练习代码:
资料来源:课时44.显示不同类型的消息对话框_哔哩哔哩_bilibili
import sys, os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class DemoScrollArea(QWidget):
def __init__(self, parent=None):
super(DemoScrollArea, self).__init__(parent)
self.setUI()
def setUI(self):
MainLay=QVBoxLayout()
self.setLayout(MainLay)
b1 = QPushButton('关于对话框')
b2 = QPushButton('错误对话框')
b3 = QPushButton('警告对话框')
b4 = QPushButton('提问对话框')
b5 = QPushButton('消息对话框')
b1.clicked.connect(self.about)
b2.clicked.connect(self.critical)
b3.clicked.connect(self.warning)
b4.clicked.connect(self.question)
b5.clicked.connect(self.information)
MainLay.addWidget(b1)
MainLay.addWidget(b2)
MainLay.addWidget(b3)
MainLay.addWidget(b4)
MainLay.addWidget(b5)
def about(self):
QMessageBox.about(self,'关于','不可以为空值')
def critical(self):
QMessageBox.critical(self,'错误','不可以为空值',QMessageBox.Yes|QMessageBox.No)
def warning(self):
QMessageBox.warning(self,'警告','不可以为空值',QMessageBox.Yes|QMessageBox.No)
def question(self):
QMessageBox.question(self,'问题','不可以为空值',QMessageBox.Yes|QMessageBox.No)
def information(self):
QMessageBox.information(self,'问题','不可以为空值',QMessageBox.Yes|QMessageBox.No)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoScrollArea()
window.show()
sys.exit(app.exec())
三、特殊对话框
(一)输入对话框
代码:
import sys, os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
'''
资料来源:https://www.bilibili.com/video/BV1qK411p7bW?p=44&vd_source=4786f682d55e0415f381ab2f415da999
'''
class DemoScrollArea(QWidget):
def __init__(self, parent=None):
super(DemoScrollArea, self).__init__(parent)
self.setUI()
def setUI(self):
formLay=QFormLayout()
self.setLayout(formLay)
self.b1=QPushButton('获取列表中选项')
self.b1.clicked.connect(self.getItems)
self.l1=QLineEdit()
formLay.addRow(self.b1,self.l1)
self.b2=QPushButton('获取字符串')
self.b2.clicked.connect(self.getText)
self.l2=QLineEdit()
formLay.addRow(self.b2,self.l2)
self.b3=QPushButton('获取整数')
self.b3.clicked.connect(self.getInt)
self.l3=QLineEdit()
formLay.addRow(self.b3,self.l3)
def getItems(self):
items=('C','C++','C#','Java','python')
item,ok=QInputDialog.getItem(self,'请选择编程语言','语言列表',items)
if ok and item:
self.l1.setText(item)
def getText(self):
text,ok=QInputDialog.getText(self,'文本输入框','输入姓名')
if ok and text:
self.l2.setText(text)
def getInt(self):
num,ok=QInputDialog.getInt(self,'正数输入框','请输入数字')
if ok and num:
self.l3.setText(str(num))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoScrollArea()
window.show()
sys.exit(app.exec())
(二)文件对话框
代码:
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QFileDialog
from PyQt5.QtGui import QIcon
class MyWin(QWidget):
def __init__(self):
super(MyWin, self).__init__()
self.setWindowTitle('文件对话框')
b1=QPushButton('设置窗口图标')
b1.setParent(self)
a,b=QFileDialog.getOpenFileName(self,'打开文件','H:/Copy','图像文件(*.jpeg *.png *.jpeg)')
print(a)
print(b)
c=QFileDialog.getExistingDirectory()
print(c)
self.setWindowIcon(QIcon(a))
d=QFileDialog.getSaveFileName()
print(d)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWin()
w.show()
app.exec()
'''
1.方法
*.getOpenFileName() 选择文件
4个参数分别是父控件、文件对话框的标题名称(如对话框左上角显示”打开文件“,当然也可以是其他字符)、起始路径(如果为空值,则起始
路径为当前py文件所在的路径)、文件扩展名过滤。文件扩展名过滤的格式:”名称(*.格式1 *.格式2 *.格式3)“
返回值是由两个字符串构成的元组。元组第一个元素是文件名,第二个是文件类型。
*.getExistingDirectory() 选择文件夹
3个参数分别是父控件、标题、起始路径。返回值是字符串;返回文件夹路径
*.getSaveFileName() 文件保存
4个参数分别是父控件、标题、起始路径、文件扩展名过滤。返回值是由两个字符串构成的元组。元组第一个元素是文件名,第二个是文件类型
名。
资料来源:
https://www.cnblogs.com/ckxingchen/p/17054878.html
'''
(三)字体对话框
代码:
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QLineEdit,QHBoxLayout,QFontDialog,QColorDialog
from PyQt5.QtGui import QIcon
class MyWin(QWidget):
def __init__(self):
super(MyWin, self).__init__()
self.setWindowTitle('测试字体对话框')
lay=QHBoxLayout()
self.setLayout(lay)
self.l1=QLineEdit()
b1=QPushButton('修改字体')
b1.clicked.connect(self.setFont)
lay.addWidget(self.l1)
lay.addWidget(b1)
def setFont(self):
font, bool1 = QFontDialog.getFont()
if bool1==True:
self.l1.setFont(font)
'''
https://blog.csdn.net/weixin_43054437/article/details/123962790
https://blog.csdn.net/xiezhongyuan07/article/details/81234754
https://blog.csdn.net/weixin_50296259/article/details/130632168
'''
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWin()
w.show()
app.exec()
(四)颜色对话框
代码:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit, QVBoxLayout, QColorDialog,QLabel
from PyQt5.QtGui import QPalette,QColor
class MyWin(QWidget):
def __init__(self):
super(MyWin, self).__init__()
self.setWindowTitle('测试颜色对话框')
self.resize(300,200)
lay = QVBoxLayout()
self.setLayout(lay)
b1 = QPushButton('修改字体颜色')
b1.clicked.connect(self.setColor)
b2=QPushButton('修改背景颜色')
b2.clicked.connect(self.B_Color)
self.label1=QLabel('中华人民共和国')
# self.label1.resize(300,200)
lay.addWidget(b1)
lay.addWidget(b2)
# lay.addStretch()
lay.addWidget(self.label1)
def setColor(self):
print(12)
color = QColorDialog.getColor()
print(color)
p=QPalette()
print(p)
p.setColor(QPalette.WindowText,color)
# p.setColor(QPalette.WindowText,color)
self.label1.setPalette(p)
def B_Color(self):
print(12)
color1 = QColorDialog.getColor()
print(color1)
p=QPalette()
print(p)
p.setColor(QPalette.Window,color1)
# p.setColor(QPalette.WindowText,color)
self.label1.setAutoFillBackground(True)
self.label1.setPalette(p)
'''
Palette /ˈpælət/ 英语含义为调色板
https://blog.csdn.net/weixin_43054437/article/details/123962790
https://blog.csdn.net/xiezhongyuan07/article/details/81234754
https://blog.csdn.net/weixin_50296259/article/details/130632168
'''
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MyWin()
w.show()
app.exec()
(五)打印对话框
1.代码
边学边练的代码,课程来源:
https://www.bilibili.com/video/BV1qK411p7bW?p=44&vd_source=4786f682d55e0415f381ab2f415da999
import sys, os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtPrintSupport import QPrinter,QPageSetupDialog,QPrintDialog
'''
资料来源:https://www.bilibili.com/video/BV1qK411p7bW?p=44&vd_source=4786f682d55e0415f381ab2f415da999
'''
class myWin(QWidget):
def __init__(self):
super(myWin, self).__init__()
self.printer=QPrinter()
self.setUI()
def setUI(self):
Lay=QVBoxLayout()
self.editor=QTextEdit()
b1=QPushButton('打开文件')
b2 = QPushButton('打开设置')
b3 = QPushButton('打印文档')
b1.clicked.connect(self.OpenFile)
b2.clicked.connect(self.ShowSettingDialog)
b3.clicked.connect(self.ShowPrintDialog)
Lay.addWidget(self.editor)
Lay.addWidget(b1)
Lay.addWidget(b2)
Lay.addWidget(b3)
self.setLayout(Lay)
def OpenFile(self):
fname=QFileDialog().getOpenFileName(self,'打开本地文件','./')
if fname[0]: # 经测试发现,此句 if str:相当于if True:直接执行if中的语句。
with open(fname[0],'r',encoding='utf_8',errors='ignore') as f:
self.editor.setText(f.read())
def ShowSettingDialog(self):
printdialog=QPageSetupDialog(self.printer,self)
printdialog.exec_()
def ShowPrintDialog(self):
printdialog=QPrintDialog(self.printer,self)
if QDialog.Accepted==printdialog.exec_():
self.editor.print(self.printer)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = myWin()
window.show()
sys.exit(app.exec())
(六)进度条对话框 (用到时再作总结)
资料:070.PyQt5_QProgressDialog_进度对话框_pyqt qprogressdialog-CSDN博客
代码:
import sys,time
from PyQt5.QtWidgets import QApplication, QWidget,QPushButton,QProgressDialog
class Demo(QWidget):
def __init__(self):
super().__init__()
self.resize(300,300)
pushButton=QPushButton('按钮',self)
pushButton.move(100,250)
pushButton.clicked.connect(self.AA)
self.progressDialog=QProgressDialog('进度提示', '', 1, 200, self) #创建进度对话框
self.progressDialog.canceled.connect(self.BB) #取消时发出的信号
self.progressDialog.setMinimumDuration(3) #设置最小展示时长
#在规定时间内进度条走满了就不展示了,没有走满就展示
s=self.progressDialog.minimumDuration() #返回最小展示时长
print(s)
self.progressDialog.setAutoClose(False) #进度条走满时是否自动关闭
#True 自动关闭--默认
#要自动关闭的条件:setAutoReset必须为True
#autoClose() 返回是否自动关闭
self.progressDialog.setAutoReset(False) #是否自动重置
#False 不重置--进度条走满时,当前值不返回最小值
#True 默认
#autoReset() 返回是否自动重置
#reset() 重置
self.progressDialog.setMinimum(0) #最小值
self.progressDialog.setMaximum(200) #最大值
self.progressDialog.setRange(0, 200) #最小值和最大值
for i in range(0,201):
self.progressDialog.setValue(i)
time.sleep(0.01)
def AA(self):
#self.pd.setValue(30) #设置当前值
s=self.progressDialog.value() #返回当前值
#self.pd.setLabelText('xxx') #设置提示文本
#s=self.pd.labelText() #返回提示文本
#self.pd.setCancelButtonText('取消按钮') #按钮文本
s=self.progressDialog.wasCanceled() #返回是否已经取消
#self.pd.cancel() 取消
print(s)
pass
def BB(self):
print('取消了')
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = Demo()
demo.show()
sys.exit(app.exec_())
PyQt QFileDialog文件选择对话框构造函数、属性和方法 - Python自学网 (wakey.com.cn)