PyQt5 – QDialog类

  • Post category:Python

PyQt5 – QDialog类的完整使用攻略

1. QDialog类概览

QDialog类是PyQt5中的一个重要组件,它是一个弹出式的对话框窗口。QDialog类继承自QWidget类,因此可以像平常创建QWidget对象一样地创建QDialog对象。

QDialog窗口可以用作应用程序的设置窗口,文件选取窗口等UI交互窗口。

2. QDialog类基本用法

2.1 创建一个简单的QDialog窗口

在PyQt5中使用QDialog窗口的基本方法是:

  1. 创建QDialog对象
  2. 设置QDialog窗口的尺寸和位置等属性
  3. 显示QDialog窗口,并等待事件的响应

下面是一个简单的示例代码:

import sys
from PyQt5.QtWidgets import QApplication, QDialog

if __name__ == '__main__':
    app = QApplication(sys.argv)
    dialog = QDialog()
    dialog.setWindowTitle('My first dialog')
    dialog.setGeometry(100, 100, 250, 150)
    dialog.exec_()

2.2 QDialog窗口的模态和非模态方式

QDialog窗口有两种显示方式:模态和非模态。模态窗口是指当前打开的窗口不关闭,其它窗口无法与用户交互,直到当前窗口关闭。非模态窗口是指可以打开多个窗口并且可以同时进行与多个窗口的交互。

可以使用QDialog的exec_()方法以模态方式显示对话框。上面的示例代码中显示窗口的方法就是模态方式。

可以使用QDialog的show()方法以非模态方式显示对话框。示例如下:

import sys
from PyQt5.QtWidgets import QApplication, QDialog

if __name__ == '__main__':
    app = QApplication(sys.argv)
    dialog = QDialog()
    dialog.setWindowTitle('My first dialog')
    dialog.setGeometry(100, 100, 250, 150)
    dialog.show()
    sys.exit(app.exec_())

3 QDialog类高级用法

3.1 QDialog窗口的布局管理

QDialog窗口可以像普通QWidget窗口一样使用各种布局管理器(如QWidget、QVBoxLayout、QHBoxLayout等)。下面是一个使用QVBoxLayout布局管理器的示例:

import sys
from PyQt5.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QPushButton

class CustomDialog(QDialog):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('My custom dialog')

        label = QLabel('This is a custom dialog!')
        button_ok = QPushButton('OK')
        button_cancel = QPushButton('Cancel')

        vbox = QVBoxLayout()
        vbox.addWidget(label)
        vbox.addWidget(button_ok)
        vbox.addWidget(button_cancel)

        self.setLayout(vbox)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    dialog = CustomDialog()
    dialog.setGeometry(100, 100, 250, 150)
    dialog.exec_()

3.2 QDialog窗口的信号和槽

QDialog窗口中的按钮和控件也可以使用PyQt5的信号和槽机制与代码交互,例如下面的示例:

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QPushButton

class CustomDialog(QDialog):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('My custom dialog')

        label = QLabel('This is a custom dialog!')
        button_ok = QPushButton('OK')
        button_cancel = QPushButton('Cancel')

        vbox = QVBoxLayout()
        vbox.addWidget(label)
        vbox.addWidget(button_ok)
        vbox.addWidget(button_cancel)

        self.setLayout(vbox)

        button_ok.clicked.connect(self.do_ok)
        button_cancel.clicked.connect(self.do_cancel)

    def do_ok(self):
        print('OK button clicked!')

    def do_cancel(self):
        print('Cancel button clicked!')
        self.reject()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    dialog = CustomDialog()
    dialog.setGeometry(100, 100, 250, 150)
    dialog.exec_()

4. 总结

QDialog类是PyQt5中一个重要的组件,它可以用作应用程序的设置窗口、文件选取窗口等UI交互窗口。在使用QDialog类时,可以设置不同的显示方式(模态和非模态)、使用不同的布局管理器和信号和槽实现交互等。