[Python自学] PyQT5-各种QDialog对话框

Posted 风间悠香

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Python自学] PyQT5-各种QDialog对话框相关的知识,希望对你有一定的参考价值。

一、QDialog对话框

QDialog是所有对话框的父类,其子类包含:

1)QMessageBox

2)QColorDialog

3)QFileDialog

4)QFontDialog

5)QInputDialog

def initUI9(self):
    self.resize(200, 100)
    button = QPushButton("弹出对话框")
    button.clicked.connect(self.showDialog)

    layout = QVBoxLayout()
    layout.addWidget(button)

    self.setLayout(layout)

def showDialog(self):
    dialog = QDialog()
    btn = QPushButton(\'关闭\', dialog)
    btn.clicked.connect(dialog.close)
    btn.move(50, 50)
    dialog.setWindowTitle(\'对话框\')
    dialog.setWindowModality(Qt.ApplicationModal)  # 当对话框显示时,主窗口的所有控件都不可用
    dialog.exec()  # 显示对话框

效果:

二、QMessageBox对话框

QMessageBox是消息对话框,主要有一下几种:

1)关于对话框

2)错误对话框

3)警告对话框

4)提问对话框

5)消息对话框

这些对话框主要有两点不同:

1)显示的对话框图标可能不同

2)显示的按钮可能不同,但是一般可以设置想要的按钮

1.关于对话框

QMessageBox.about(self, \'关于\', \'这是一个关于对话框\')

效果:

 可以看到,关于对话框显示了窗口小图标、大图标、还有一个OK按钮。

2.消息对话框

QMessageBox.information(self, \'消息\', \'这是一个消息对话框\', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

QMessageBox.Yes | QMessageBox.No 表示要显示什么样的按钮,最后一个参数表示默认选中哪个按钮。

效果:

3.警告对话框

QMessageBox.warning(self, \'警告\', \'这是一个警告对话框\', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

效果:

4.错误对话框

QMessageBox.critical(self, \'错误\', \'这是一个错误对话框\', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

效果:

5.提问对话框

QMessageBox.question(self, \'提问\', \'这是一个提问对话框\', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

效果:

三、QInputDialog对话框

QInputDialog用于帮助我们输入数据。有一下几种输入对话框:

1)getItem,从ComboBox中选择

2)getText,从LineEdit中获取

3)getInt,从spinBox中获取

1.getItem获取值

def initUI9(self):
    self.resize(300, 200)
    self.button = QPushButton("输入值")
    self.button.clicked.connect(self.inputDialog)

    self.lineEdit = QLineEdit()

    layout = QHBoxLayout()
    layout.addWidget(self.button)
    layout.addWidget(self.lineEdit)

    self.setLayout(layout)

def inputDialog(self):
    items = [\'python\', \'C\', \'C++\', \'JAVA\', \'Ruby\']
    text, ok = QInputDialog.getItem(self, \'请选择编程语言\', \'语言列表\', items)
    if ok and text:
        self.lineEdit.setText(text)  # 在InputDialog中选择的值设置到lineEdit中

效果:

2.getText获取值

def inputDialog(self):
    text, ok = QInputDialog.getText(self, \'文本输入框\', \'输入编程语言\')
    if ok and text:
        self.lineEdit.setText(text)  # 在InputDialog中选择的值设置到lineEdit中

效果:

3.getInt获取值

def inputDialog(self):
    num, ok = QInputDialog.getInt(self, \'整数输入框\', \'输入数字\')
    if ok and num:
        self.lineEdit.setText(str(num))  # 在InputDialog中选择的值设置到lineEdit中

效果:

四、QFontDialog字体对话框

def initUI(self):
    self.resize(300, 150)
    self.btn = QPushButton("选择字体")
    self.btn.clicked.connect(self.popFontDialog)
    self.fontLabel = QLabel(\'hellop,测试字体例子\')
    layout = QVBoxLayout()
    layout.addWidget(self.btn)
    layout.addWidget(self.fontLabel)
    self.setLayout(layout)
    # 添加窗口标题
    self.setWindowTitle("FontDialog控件Demo")

def popFontDialog(self):
    font, ok = QFontDialog.getFont()
    if ok:
        self.fontLabel.setFont(font)

效果:

五、QColorDialog颜色对话框

def initUI(self):
    self.resize(300, 150)
    self.btn = QPushButton("选择颜色")
    self.btn.clicked.connect(self.popColorDialog)
    self.colorLabel = QLabel(\'hello,测试字体例子\')
    layout = QVBoxLayout()
    layout.addWidget(self.btn)
    layout.addWidget(self.colorLabel)
    self.setLayout(layout)
    # 添加窗口标题
    self.setWindowTitle("ColorDialog控件Demo")

def popColorDialog(self):
    color = QColorDialog.getColor()
    p = QPalette()
    p.setColor(QPalette.WindowText, color)
    self.colorLabel.setPalette(p)

效果:

修改背景色:

def initUI(self):
    self.move(400,900)
    self.resize(300, 150)
    self.btn = QPushButton("选择颜色")
    self.btn.clicked.connect(self.popColorDialog)
    self.colorLabel = QLabel(\'hello,测试字体例子\')
    layout = QVBoxLayout()
    layout.addWidget(self.btn)
    layout.addWidget(self.colorLabel)
    self.setLayout(layout)
    # 添加窗口标题
    self.setWindowTitle("ColorDialog控件Demo")

def popColorDialog(self):
    color = QColorDialog.getColor()
    p = QPalette()
    p.setColor(QPalette.Window, color)
    self.colorLabel.setAutoFillBackground(True)  # 允许自动填充背景色
    self.colorLabel.setPalette(p)  # 修改背景色

效果:

六、QFileDialog文件对话框

def initUI(self):
    self.resize(300, 150)
    self.btn1 = QPushButton("打开图片")
    self.btn1.clicked.connect(self.loadImageFile)
    self.imageLabel = QLabel()

    self.btn2 = QPushButton("打开文本")
    self.btn2.clicked.connect(self.loadTextFile)
    self.content = QTextEdit()

    layout = QVBoxLayout()
    layout.addWidget(self.btn1)
    layout.addWidget(self.imageLabel)
    layout.addWidget(self.btn2)
    layout.addWidget(self.content)

    self.setLayout(layout)
    # 添加窗口标题
    self.setWindowTitle("Demo")

# 打开图片文件
def loadImageFile(self):
    fname, _ = QFileDialog.getOpenFileName(self, \'打开文件\', \'./images\', \'图像文件 (*.jpg *.png) \')
    self.imageLabel.setPixmap(QPixmap(fname))

# 打开文本文件
def loadTextFile(self):
    dialog = QFileDialog()
    dialog.setFileMode(QFileDialog.AnyFile)
    dialog.setFilter(QDir.Files)
    if dialog.exec():
        filenames = dialog.selectedFiles()
        with open(filenames[0], \'r\', encoding=\'utf-8\') as f:
            data = f.read()
            self.content.setText(data)

效果:

 

===

以上是关于[Python自学] PyQT5-各种QDialog对话框的主要内容,如果未能解决你的问题,请参考以下文章

[Python自学] PyQT5-控件拖拽剪切板

[Python自学] PyQT5-QPushButtonQRadioButtonQCheckBoxQComboBox控件

PyQt5自学记录——PyQt5多线程实现详解

Python-GUI编程-PyQt5

python自学 之 Anaconda 的安装

Python 小白从零开始 PyQt5 项目实战基本控件