简介
PyQt5 tutorial 2023: Create a GUI with Python and Qt
官方提供了几本书,我没钱买。有钱买了的大哥,可不可以提供一份拷贝本。
这是一个前端框架。
特点是跨平台:Windows, Mac or Linux
官方说的安卓苹果也支持。只不过向导只有电脑上的例子。
安装
环境: conda pycharm python 3.6 or 3.5
python目前只能用这个版本,再高 fbs要付费了。
pip install PyQt5
pip install fbs
创建工程
fbs startproject
创建安装文件
安装 nsis
Download - NSIS
设置环境变量 path
fbs freeze
fbs installer:
最终结果如下。
例子:
GitHub - baoboa/pyqt5: PyQt5 from riverbank
appctxt = ApplicationContext() # 1. Instantiate ApplicationContext
window = QMainWindow()
window.resize(250, 150)
window.show()
exit_code = appctxt.app.exec_() # 2. Invoke appctxt.app.exec_()
sys.exit(exit_code)
布局:
Layout Management | Qt Widgets 5.15.12
layout布局是一个树形结构。不了解的话,可以试试Qt Designer:是一个图形化设计工具,很明显的显示了树形结构
后面有几个例子,文档都是c++写的。
上面的是python写的例子。
例子1:AddressBook
pyqt5/part1.py at master · baoboa/pyqt5 · GitHub
网格布局QGridLayout() 看看后面两个参数。
mainLayout.addWidget(nameLabel, 0, 0)
mainLayout.addWidget(self.nameLine, 0, 1)
mainLayout.addWidget(addressLabel, 1, 0, Qt.AlignTop)
mainLayout.addWidget(self.addressText, 1, 1)
列布局 QVBoxLayout()
行布局QHBoxLayout
总体设计思路:
总体是一个树形结构。 根节点是qwidget,一个win窗口。代码如下:
class AddressBook(QWidget):
下一个节点是一个QGridLayout 网格布局。代码如下:
self.setLayout(mainLayout)
grid里面有很多组件,代码如下:
mainLayout.addWidget(self.nameLine, 0, 1)
grid里面还有一些布局容器。
mainLayout.addLayout(buttonLayout1, 1, 2)
一个设计技巧:
所有组件,容器,都是父节点的属性。我能想到的原因是,数据传输。
self.submitButton = QPushButton("&Submit")
事件
self.addButton.clicked.connect(self.addContact)
自定义响应函数:
def addContact(self):
self.oldName = self.nameLine.text()
self.oldAddress = self.addressText.toPlainText()
self.nameLine.clear()
self.addressText.clear()
self.nameLine.setReadOnly(False)
self.nameLine.setFocus(Qt.OtherFocusReason)
self.addressText.setReadOnly(False)
self.addButton.setEnabled(False)
self.nextButton.setEnabled(False)
self.previousButton.setEnabled(False)
self.submitButton.show()
self.cancelButton.show()
总结:
很简单的一个框架,最重要最重要的是它是跨平台的,而且还可以用python实现,对于自己来落地一个算法,无疑是最节省时间的。下一篇,了解更多的api,和布局技巧。