PyQt5 对话框架知识 深度总结

一、普通对话框

(一)简介

        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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值