创建对话框应用程序#

本教程展示如何构建一个简单的带有些基本小部件的对话框。想法是让用户在一个 QLineEdit 中提供他们的名字,当用户点击一个 QPushButton 时,对话框会向他们打招呼。

让我们从创建并显示一个对话框的简单占位符开始。此占位符在教程过程中会被更新,但如果你需要的话,可以直接使用这个占位符。

import sys
from PySide6.QtWidgets import QApplication, QDialog, QLineEdit, QPushButton

class Form(QDialog):

    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        self.setWindowTitle("My Form")


if __name__ == '__main__':
    # Create the Qt Application
    app = QApplication(sys.argv)
    # Create and show the form
    form = Form()
    form.show()
    # Run the main Qt loop
    sys.exit(app.exec())

导入内容对你来说并不陌生,与创建 QApplication 和执行 Qt 主循环一样。这里唯一的创新是 类定义

你可以创建任何子类 PySide6 小部件的类。在这种情况下,我们正在继承 QDialog 以定义一个自定义对话框,我们称其为 Form。我们还有一些实现了的 init() 方法,它会调用带有父小部件的 QDialog 的 init 方法(如果有)。另外,新的 setWindowTitle() 方法仅仅设置了对话框窗口的标题。在 main() 中,你可以看到我们创建了一个 Form 对象,并将其展示给世界。

创建小部件#

我们将创建两个小部件:一个用户可以输入他们名字的 QLineEdit,和一个打印 QLineEdit 内容的 QPushButton。所以,让我们在我们 Form 的 init() 方法中添加以下代码

# Create widgets
self.edit = QLineEdit("Write my name here..")
self.button = QPushButton("Show Greetings")

从代码中很明显,这两个小部件都会显示相应的文本。

创建一个布局以组织小部件#

Qt 提供了布局支持,可以帮助您组织应用程序中的小部件。在这种情况下,让我们使用 QVBoxLayout 来垂直布局小部件。在创建小部件后,将以下代码添加到 init() 方法中。

# Create layout and add widgets
layout = QVBoxLayout(self)
layout.addWidget(self.edit)
layout.addWidget(self.button)

因此,我们创建布局,使用 addWidget() 添加小部件。

创建用于问候和连接按钮的函数

最终,我们只需为我们的自定义 表单 添加一个函数,并 连接 我们按钮到它。我们的函数将是表单的一部分,因此您必须在一开始创建的 init() 函数之后添加它。

# Greets the user
def greetings(self):
    print(f"Hello {self.edit.text()}")

我们的函数只是将 QLineEdit 的内容打印到 Python 控制台。我们通过 QLineEdit.text() 方法访问文本。

现在我们已经准备好了一切,我们只需要将 QPushButton 连接到 Form.greetings() 方法。为此,将以下行添加到 init() 方法中。

# Add button signal to greetings slot
self.button.clicked.connect(self.greetings)

一旦执行,您就可以在 QLineEdit 中输入您的名字,并观察控制台中的问候信息。

完整代码

以下是本教程的完整代码

import sys
from PySide6.QtWidgets import (QLineEdit, QPushButton, QApplication,
    QVBoxLayout, QDialog)

class Form(QDialog):

    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        # Create widgets
        self.edit = QLineEdit("Write my name here")
        self.button = QPushButton("Show Greetings")
        # Create layout and add widgets
        layout = QVBoxLayout()
        layout.addWidget(self.edit)
        layout.addWidget(self.button)
        # Set dialog layout
        self.setLayout(layout)
        # Add button signal to greetings slot
        self.button.clicked.connect(self.greetings)

    # Greets the user
    def greetings(self):
        print(f"Hello {self.edit.text()}")

if __name__ == '__main__':
    # Create the Qt Application
    app = QApplication(sys.argv)
    # Create and show the form
    form = Form()
    form.show()
    # Run the main Qt loop
    sys.exit(app.exec())

执行代码并写下您的名字后,按钮将在终端上显示消息

Simple Dialog Example