Python中如何使用Qt for Python (aka PySide2)进行GUI开发

https://wiki.qt.io/Qt_for_Python

代码示例:

http://blog.qt.io/blog/2018/05/04/hello-qt-for-python/
Python中如何使用Qt for Python (aka PySide2)进行GUI开发


22 回复

PySide 的 Qt 版本不是最新的 比较蛋疼


帖子回复:

要在Python里用Qt for Python(也叫PySide2)搞GUI开发,其实挺直接的。PySide2就是Qt官方给Python的绑定,和PyQt5用起来差不多,但许可证更友好(LGPL)。

1. 先装包:

pip install PySide2

2. 基本代码结构: 一个最简单的窗口程序长这样:

import sys
from PySide2.QtWidgets import QApplication, QLabel, QWidget

if __name__ == "__main__":
    app = QApplication(sys.argv)  # 每个Qt程序都要有这个
    window = QWidget()            # 创建一个空窗口
    window.setWindowTitle("我的第一个PySide2程序")
    window.setGeometry(100, 100, 300, 200)  # (x, y, 宽度, 高度)
    
    label = QLabel("Hello PySide2!", window)  # 在窗口里放个标签
    label.move(100, 80)
    
    window.show()  # 显示窗口
    sys.exit(app.exec_())  # 进入主循环

3. 用Qt Designer加速开发: 别傻乎乎全手写代码,Qt Designer(图形界面设计器)才是生产力工具。它随PySide2一起安装,通常在这里:

<你的Python环境路径>/Lib/site-packages/PySide2/designer.exe

用它拖拖拽拽做好界面,保存为.ui文件(比如mywindow.ui),然后在代码里动态加载:

from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFile

loader = QUiLoader()
ui_file = QFile("mywindow.ui")
ui_file.open(QFile.ReadOnly)
window = loader.load(ui_file)
ui_file.close()
window.show()

或者更常用的方式,用pyside2-uic工具把.ui文件转成Python代码:

pyside2-uic mywindow.ui -o ui_mywindow.py

然后在主程序里导入使用:

from PySide2.QtWidgets import QApplication
from ui_mywindow import Ui_MainWindow

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        # 这里可以连接信号槽,比如:
        self.ui.pushButton.clicked.connect(self.on_button_click)
    
    def on_button_click(self):
        self.ui.label.setText("按钮被点了!")

app = QApplication([])
window = MyWindow()
window.show()
app.exec_()

4. 信号槽(事件处理): 这是Qt的核心机制,处理用户交互贼方便:

from PySide2.QtWidgets import QPushButton
from PySide2.QtCore import Slot

button = QPushButton("点击我")
button.clicked.connect(self.some_function)  # 连接信号到槽函数

@Slot()  # 这个装饰器不是必须的,但用了更好
def some_function(self):
    print("按钮被点击了")

总结建议: 先用Qt Designer画界面,再用信号槽处理交互,这是最高效的PySide2开发流程。

Python 写 Qt 有什么优势么?能否直接编译为 native ?

那我来个示例: Python Qt 写的视屏截图,自动识别字幕位置拼接成长图: https://github.com/shootsoft/PlutoVideoSnapshoter

打包了 Windows 和 macOS 的可执行文件包,欢迎 star😁




PySide 不如官方的 Qt Designer 好用,python 可以直接加载 ui 文件,可以打包成可执行文件。

感觉做界面布局好麻烦,有没有拖控件的方法?

Qt Designer 可以拖放,生成.ui 文件,python 可以直接加载。不过有些技巧还是需要掌握的,建议看个一个小时左右的视屏教程就可以了。

解决方案:不要那么在意界面,能用就得了

话说怎么没见人抱怨过前端布局麻烦 …

问一下 pytouch2 和 pyqt5 有啥区别

上面打错了,是 pyside2 和 pyqt5 有啥区别

老哥 你有教程么 方便放一下么


PyQt 是商业及 GPL 的版权, 而 PySide 是 LGPL.
也就是如果使用 PyQt 做商业应用的话就需要付费, 而使用 Nokia 的 PySide 则不需要。

因为用过 c#,被 ms 惯坏了 😶

用没有人比较过 pyqt,pyside,qt/c++之间的性能?包括应用启动时间,界面流畅度等。用 python 的 qt 绑定总是在性能上有所妥协的吧?不知道会有多大妥协。我之前用 pyqt5 做过一些应用,pyqt 的另一大坑是打包麻烦。

之前用过 pyqt5,跨平台很赞。但是如果需要打包的话就很蛋疼了,总是各种依赖问题,还有包体积贼大! pyqt5 的资料也好少,想美化界面都没地方学。。。

没几个人用,没包

py 3.6 不支持 23333
<img src=“https://view.moezx.cc/images/2018/05/06/Capture851208c08750b72e.png” alt=“Capture851208c08750b72e.png” border=“0” />



python 写 qt,可以整合 numpy,对比 C++调用 blas 或者其他高端矩阵库方便许多。

若是用不到 numpy,宁愿直接写 C++。毕竟自从 c++11 后,函数牛逼了,智能指针、正则、auto 进标准了,写起来跟脚本语言差不多

这个我不是很清楚…不过我看其他人貌似已经回答了😅

YouTube 上有很多,付费的 Udemy 有比较系统的课程。

QT 还活着啊。

回到顶部