本文内容适合Python GUI初学者,仅把自己对于pyside2学习笔记简要分享整理
本文整理学习自白羽黑羽教Python
Python的GUI的库常见包括Tkinter、PyQt5和Pyside2。Tkinter控件较少,适合开发简单工具。PyQt5和Pyside2则都是对Qt的封装,PyQt5由Riverbank Computing公司维护,历史更长,但是Pyside2因为由Qt公司维护,可以视为Qt的亲儿子,个人认为未来Pyside2 的前景会更好一些。此外PyQt是GPL/商业协议,PySide是LGPL/GPL/商业协议。
在Qt中当发生如鼠标点击等事件时,就会发出一个信号signal,表示某项特定事件发生了,槽则代表了用于处理该事件的函数,有了信息和槽后需要特定的方式将他们绑定成为连接connect。
此处提供一段简单代码,用于快速理解pyside2代码的整体结构,其中包括常用控件放置以及将信号和槽使用。
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QPlainTextEdit, QMessageBox
def handleClicked(): # 槽
tEdit.setPlainText('Clicked')
QMessageBox.about(win, 'Message', 'Button Clicked')
app = QApplication([])
win = QMainWindow()
win.resize(200, 100)
win.move(10, 20)
win.setWindowTitle('Test')
tEdit = QPlainTextEdit(win)
tEdit.setPlainText('Original')
tEdit.move(10,50)
button = QPushButton('CLICK', win)
button.clicked.connect(handleClicked) # 信号槽的绑定
win.show()
app.exec_()
上述代码为基础,handleClicked直接访问了全局变量,进行模块化封装后:
class TestWin():
def __init__(self):
super().__init__()
self.win = QMainWindow()
self.win.resize(200, 100)
self.win.move(10, 20)
self.win.setWindowTitle('Test')
self.tEdit = QPlainTextEdit(self.win)
self.tEdit.setPlainText('Original')
self.tEdit.move(10, 50)
self.tbutton = QPushButton('CLICK', self.win)
self.tbutton.clicked.connect(self.handleClicked)
def handleClicked(self):
self.tEdit.setPlainText('Clicked')
QMessageBox.about(self.win, 'Message', 'Button Clicked')
if __name__ == '__main__':
app = QApplication()
twin = TestWin()
twin.win.show()
app.exec_()
上述快速上手中已经展示了如何通过代码创建控件,整体流程如下:
创建控件->设置大小resize->设置位置move->设置控件专有方法
通过拖拉的方式放置控件,并配合属性进行详细设置,设置完成后保存为.ui文件。观察ui文件,其内容为xml格式保存了各个控件的详细信息。
Qt Designer工具位置Lib\site-packages\PySide2\designer
常见的布局包括四种垂直布局、水平布局、表格布局和表单布局,引入布局以后最直观的影响就是当窗口大小改变时,借助不同布局的组合可以使得窗口自适应的变化。
控件网格状摆放,有的控件可以占用多个格子
类似于一个只有两列表格布局
控件介绍详见Qt官方文档
https://doc.qt.io/qtforpython/PySide2/QtGui/index.html
有关Pyside2的项目主页
https://doc.qt.io/qtforpython/PySide2/QtGui/index.html
当完成界面设计以及代码逻辑后,想要生成可执行程序可以使用PyInstaller
工具。
pyinstaller httpclient.py --noconsole --hidden-import PySide2.QtXml
--noconsole
表示程序运行时不现实命令行窗口
--hidden-import PySide2.QtXml
因为PySide2.QtXml是动态载入的,PyInstaller需要显式的指定。