PySide:修订间差异

无编辑摘要
无编辑摘要
第73行: 第73行:
==布局==
==布局==


==多界面==
以下简单示例使用QStackedWidget实现多界面程序。
<syntaxhighlight lang="python" >
from PySide6.QtCore import QFile
from PySide6.QtGui import QAction,QActionGroup
from PySide6.QtWidgets import QApplication, QMainWindow, QDialog, \
                    QWidget, QStackedWidget, QToolBar,QSizePolicy
class Page_1_interface(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('界面1')
    def refresh(self):
        print("重新调回界面1")
class Page_2_interface(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('界面2')
class SettingsDialog(QDialog):
    def __init__(self, parent=None): # parent参数传递父窗口
        super().__init__(parent)
        self.setWindowTitle('设置界面')
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('x系统')
        # 创建工具栏
        toolbar = QToolBar()
        self.addToolBar(toolbar)
        toolbar.setMovable(False)
        # 创建动作组
        action_group = QActionGroup(self) 
        action_group.setExclusive(True)       
        # 创建动作
        self.action_page_1 = QAction("界面1", self)
        self.action_page_1.setCheckable(True)
        self.action_page_1.setChecked(True)
        self.action_page_1.triggered.connect(self.go_page_1)
        toolbar.addAction(self.action_page_1)
        action_group.addAction(self.action_page_1)
        self.action_page_2 = QAction("界面2", self)
        self.action_page_2.setCheckable(True)
        self.action_page_2.triggered.connect(self.go_page_2)
        toolbar.addAction(self.action_page_2)
        action_group.addAction(self.action_page_2)
        # 弹簧部件(QSpacerItem),以将设置按钮推到右侧
        spacer = QWidget()
        spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        toolbar.addWidget(spacer)
        self.action_setting = QAction("设置", self)
        toolbar.addAction(self.action_setting)
        self.action_setting.triggered.connect(self.show_settings_dialog)
        # 创建堆叠窗口
        self.stacked_widget = QStackedWidget()
        # 页面1
        self.page_1 = Page_1_interface()
        self.stacked_widget.addWidget(self.page_1)  # 添加页面1的内容
        # 页面2
        self.page_2 = Page_2_interface()
        self.stacked_widget.addWidget(self.page_2)  # 添加页面2的内容
        self.setCentralWidget(self.stacked_widget)
    def go_page_1(self):
        # 跳转到页面1
        self.stacked_widget.setCurrentWidget(self.page_1)
        self.action_page_1.setChecked(True) # 高亮按钮
        self.page_1.refresh()  # 页面刷新函数
    def go_page_2(self):
        # 跳转到页面2
        self.stacked_widget.setCurrentWidget(self.page_2)
        self.action_page_2.setChecked(True) # 高亮按钮
    def show_settings_dialog(self):
        dialog = SettingsDialog(self)  # 传递 self 作为父窗口
        dialog.exec()
if __name__ == "__main__":
        app = QApplication([])
        window = MainWindow()
        window.setMinimumSize(1000, 600)
        window.show()
        app.exec()
</syntaxhighlight>
==Designer==
==Designer==
Qt Designer是一个设计构建用户图形界面的界面化工具。在终端使用命令即可启动:
Qt Designer是一个设计构建用户图形界面的界面化工具。在终端使用命令即可启动:

2025年2月13日 (四) 01:21的版本

PySide是Qt公司开发的Python版GUI工具包。支持多WindowsLinuxmacOS平台。

简介

时间轴

2009年,发布PySide,支持Qt 4。


安装

使用pip安装

pip install pyside6

了解更多 >> PySide 文档:快速开始 PyPi:PySide6


快速入门

from PySide6 import QtCore, QtWidgets

app = QtWidgets.QApplication()
widget = QtWidgets
widget =  QtWidgets.QLabel('hello, world', alignment=QtCore.Qt.AlignCenter)
widget.resize(600, 400)
widget.show()
app.exec()

按钮点击时调用函数。

import sys
from PySide6 import QtCore, QtWidgets

class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()

        self.button = QtWidgets.QPushButton("点击!")
        self.text = QtWidgets.QLabel("Hello World",
                                     alignment=QtCore.Qt.AlignCenter)

        self.layout = QtWidgets.QVBoxLayout(self)
        self.layout.addWidget(self.text)
        self.layout.addWidget(self.button)

        self.button.clicked.connect(self.button_clicked)

    def button_clicked(self):
        self.text.setText("你点击了按钮。")


if __name__ == "__main__":
    app = QtWidgets.QApplication([])

    widget = MyWidget()
    widget.resize(800, 600)
    widget.show()

    sys.exit(app.exec())

了解更多 >> PySide 文档:快速开始


UI元素

PySide6.QtWidgets模块提供了一组UI元素,用于创建用户界面。


了解更多 >> PySide 文档:QtWidgets


布局

多界面

以下简单示例使用QStackedWidget实现多界面程序。

from PySide6.QtCore import QFile
from PySide6.QtGui import QAction,QActionGroup
from PySide6.QtWidgets import QApplication, QMainWindow, QDialog, \
                     QWidget, QStackedWidget, QToolBar,QSizePolicy 

class Page_1_interface(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('界面1')

    def refresh(self):
        print("重新调回界面1")

class Page_2_interface(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('界面2')

class SettingsDialog(QDialog):
    def __init__(self, parent=None): # parent参数传递父窗口
        super().__init__(parent)
        self.setWindowTitle('设置界面')

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('x系统')

        # 创建工具栏
        toolbar = QToolBar()
        self.addToolBar(toolbar)
        toolbar.setMovable(False)

        # 创建动作组
        action_group = QActionGroup(self)   
        action_group.setExclusive(True)        

        # 创建动作
        self.action_page_1 = QAction("界面1", self)
        self.action_page_1.setCheckable(True)
        self.action_page_1.setChecked(True)
        self.action_page_1.triggered.connect(self.go_page_1)
        toolbar.addAction(self.action_page_1)
        action_group.addAction(self.action_page_1)

        self.action_page_2 = QAction("界面2", self)
        self.action_page_2.setCheckable(True)
        self.action_page_2.triggered.connect(self.go_page_2)
        toolbar.addAction(self.action_page_2)
        action_group.addAction(self.action_page_2)


        # 弹簧部件(QSpacerItem),以将设置按钮推到右侧
        spacer = QWidget()
        spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        toolbar.addWidget(spacer)

        self.action_setting = QAction("设置", self)
        toolbar.addAction(self.action_setting)
        self.action_setting.triggered.connect(self.show_settings_dialog)

        # 创建堆叠窗口
        self.stacked_widget = QStackedWidget()

        # 页面1
        self.page_1 = Page_1_interface()
        self.stacked_widget.addWidget(self.page_1)  # 添加页面1的内容

        # 页面2
        self.page_2 = Page_2_interface()
        self.stacked_widget.addWidget(self.page_2)  # 添加页面2的内容

        self.setCentralWidget(self.stacked_widget)

    def go_page_1(self):
        # 跳转到页面1
        self.stacked_widget.setCurrentWidget(self.page_1) 
        self.action_page_1.setChecked(True) # 高亮按钮
        self.page_1.refresh()  # 页面刷新函数

    def go_page_2(self):
        # 跳转到页面2
        self.stacked_widget.setCurrentWidget(self.page_2) 
        self.action_page_2.setChecked(True) # 高亮按钮


    def show_settings_dialog(self):
        dialog = SettingsDialog(self)  # 传递 self 作为父窗口
        dialog.exec()


if __name__ == "__main__":
        app = QApplication([])
        window = MainWindow()
        window.setMinimumSize(1000, 600) 
        window.show()
        app.exec()

Designer

Qt Designer是一个设计构建用户图形界面的界面化工具。在终端使用命令即可启动:

pyside6-designer

了解更多 >> PySide 文档:将来自 Designer 或 QtCreator 的 .ui 文件与 QUiLoader 和 pyside6-uic 一起使用 PySide 文档:


打包分发

生成可执行文件

名称 描述
Nuitka 常用示例:nuitka --standalone --plugin-enable=pyside6 --include-data-dir=data=data --windows-disable-console main.py

其中:
--standalone
--include-data-dir=data=data 数据文件夹名称为data,可以放置数据或配置文件。
--windows-disable-console,不显示终端输出界面,开始打包可以先取消这个。
pyside6-deploy Pyside 6.4开始包含pyside6-deploy打包工具,是Nuitka的封装。
Pyinstaller

了解更多 >> PySide 文档:部署


资源

官网

教程

文章