Skip to main content

Python 图形界面

Python PySide 开发图形界面程序

PySide 是 Python 的一个跨平台 GUI 开发库,基于 Qt 框架,支持创建现代化的图形用户界面应用程序。 它提供丰富的控件和灵活的工具,适合开发复杂且高性能的桌面应用。 与 Tkinter 相比,PySide 的界面更现代化。

官网地址:https://wiki.qt.io/Qt_for_Python

pip install PySide6

运行程序截图

程序代码需要再 IDE 里面运行,或者系统默认终端中执行,不能在通过ssh远程连接的终端中执行。

数展示

程序代码

import sys
from PySide6.QtWidgets import (QApplication, QMainWindow, QWidget, QFormLayout, QLineEdit, QTextEdit, QComboBox,
                               QPushButton, QTableWidget, QTableWidgetItem, QMessageBox, QTabWidget, QVBoxLayout,
                               QMenuBar, QToolBar, QStatusBar)
from PySide6.QtCore import Qt

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        # 设置窗口标题和初始大小
        self.setWindowTitle("PySide 客户端展示程序")
        self.resize(600, 400)

        # 创建菜单栏,提供基本操作选项
        menu_bar = QMenuBar(self)
        file_menu = menu_bar.addMenu("文件")
        file_menu.addAction("退出", self.close)
        self.setMenuBar(menu_bar)

        # 创建工具栏,添加快捷操作按钮
        tool_bar = QToolBar(self)
        tool_bar.addAction("提交", self.submit_data)
        self.addToolBar(tool_bar)

        # 创建状态栏,显示程序状态
        status_bar = QStatusBar(self)
        status_bar.showMessage("就绪")
        self.setStatusBar(status_bar)

        # 创建中央 widget,作为所有控件的容器
        central_widget = QWidget(self)
        self.setCentralWidget(central_widget)

        # 创建 Tab 控件,分为表单输入和数据展示两个页面
        tab_widget = QTabWidget(central_widget)
        form_tab = QWidget()
        data_tab = QWidget()
        tab_widget.addTab(form_tab, "表单输入")
        tab_widget.addTab(data_tab, "数据展示")

        # 创建表单布局,包含姓名、地址、性别输入控件
        form_layout = QFormLayout(form_tab)
        self.name_edit = QLineEdit()  # 单行文本输入,用于姓名
        self.address_edit = QTextEdit()  # 多行文本输入,用于地址
        self.gender_combo = QComboBox()  # 下拉选择框,用于性别
        self.gender_combo.addItems(["男", "女", "其他"])
        form_layout.addRow("姓名:", self.name_edit)
        form_layout.addRow("地址:", self.address_edit)
        form_layout.addRow("性别:", self.gender_combo)

        # 创建提交按钮,并连接到提交数据的槽函数
        submit_button = QPushButton("提交", form_tab)
        submit_button.clicked.connect(self.submit_data)
        form_layout.addRow(submit_button)

        # 创建数据展示表格,设置列标题
        self.data_table = QTableWidget(data_tab)
        self.data_table.setColumnCount(3)
        self.data_table.setHorizontalHeaderLabels(["姓名", "地址", "性别"])

        # 设置数据展示页面的布局
        data_layout = QVBoxLayout(data_tab)
        data_layout.addWidget(self.data_table)

        # 设置中央 widget 的布局,将 Tab 控件添加到其中
        central_layout = QVBoxLayout(central_widget)
        central_layout.addWidget(tab_widget)

    def submit_data(self):
        """处理表单提交的操作"""
        # 获取用户输入的数据
        name = self.name_edit.text()
        address = self.address_edit.toPlainText()
        gender = self.gender_combo.currentText()

        # 检查输入是否为空
        if not name or not address:
            QMessageBox.warning(self, "警告", "姓名和地址不能为空!")
            return

        # 弹出确认弹框,询问用户是否提交
        reply = QMessageBox.question(self, "确认提交", "确定要提交以下数据吗?\n\n" +
                                     f"姓名: {name}\n地址: {address}\n性别: {gender}",
                                     QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

        if reply == QMessageBox.Yes:
            # 在表格中添加一行新数据
            row = self.data_table.rowCount()
            self.data_table.insertRow(row)
            self.data_table.setItem(row, 0, QTableWidgetItem(name))
            self.data_table.setItem(row, 1, QTableWidgetItem(address))
            self.data_table.setItem(row, 2, QTableWidgetItem(gender))

            # 清空表单输入
            self.name_edit.clear()
            self.address_edit.clear()
            self.gender_combo.setCurrentIndex(0)

            # 更新状态栏信息
            self.statusBar().showMessage(f"数据已提交: {name}", 5000)  # 显示5秒

if __name__ == "__main__":
    # 创建应用程序实例并运行
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())