使用PyQT进行可视化编程
写在前面
课后实验要求写一个用户管理界面进行数据库查询,之前用Java开发使用过Swing、JavaFX等,都可以直接进行拖拽实现布局。趁这次机会,学习一下PyQT的GUI编程。
安装
PyQT
pip install pyqt5
QT designer
pip install pyqt5-tools
- PyCharm配置
-
Program
参考C:\ProgramData\Anaconda3\Lib\site-packages\pyqt5_tools\designer.exe
-
Working directory
填入$ProjectFileDir$
PyUIC
(Python自带的工具)
- PyCharm配置
-
Program
参考C:\ProgramData\Anaconda3\Scripts\pyuic5.exe
-
Arguments
填入$FileName$ -o $FileNameWithoutExtension$.py
-
Working directory
填入$FileDir$
实现步骤
- 项目右键->
External Tools
->QT designer
,新建Widget项目,就可以开始拖拽进行控件布局了。Ctrl+I
得到property edit
窗口,可以进行控件的布局修改(大小、颜色字体、位置、图标等)。 - 保存为
.ui
文件,PyCharm
中右键该文件,选择External Tools
->PyUIC
,即转换得到.py
文件 - 继承并调用生成的
.py
文件
import sys
import pymysql
from PyQt5.QtWidgets import QStyleFactory
# 导入生成的UI.py文件
from UI import *
class MyPyQT_Form(QtWidgets.QWidget, Ui_Form):
def __init__(self):
# 继承生成的Ui_Form类
super(MyPyQT_Form, self).__init__()
self.setupUi(self)
# 添加按钮事件
self.buttonSearch.clicked.connect(self.search)
def search(self):
'''
按钮事件编写
'''
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
# The available styles depend on your platform
# but are usually 'Fusion', 'Windows', 'WindowsVista' (Windows only)
# and 'Macintosh' (Mac only).
app.setStyle(QStyleFactory.create('Fusion'))
my_pyqt_form = MyPyQT_Form()
my_pyqt_form.show()
sys.exit(app.exec_())
- 运行效果
PyQT控件使用
- 按钮点击事件
# self.search事件函数调用以及clicked都没有()
self.buttonSearch.clicked.connect(self.search)
- 复选框
# 选择状态,True或False
self.checkName.isChecked()
- 文本框
# .text()获得文本内容
# strip()去掉空格回车等无效字符
self.editNum.text().strip()
- 表格
# 创建数据模型
self.dataModel = QtGui.QStandardItemModel()
# 定义表标题
self.dataModel.setHorizontalHeaderItem(0, QtGui.QStandardItem("Id"))
self.dataModel.setHorizontalHeaderItem(1, QtGui.QStandardItem("Name"))
# 按行按列填入值
for row in data:
self.dataModel.setItem(rownum, 0, QtGui.QStandardItem(row[0]))
self.dataModel.setItem(rownum, 1, QtGui.QStandardItem(row[1]))
rownum += 1
# 数据模型绑定到表格对象
self.tableResult.setModel(self.dataModel)
# 每列跨度自适应(等长、长的列会无法显示)
# self.tableResult horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
# 设置最后一列拉伸至最大
# self.tableResult.horizontalHeader().setStretchLastSection(True)
# 定义表格每列的宽度
self.tableResult.setColumnWidth(0, 100)
self.tableResult.setColumnWidth(1, 60)
Reference
PyQt5 tutorial
PyQt5图形界面编程
PyQt5应用与实践
PyQt5笔记(02) – 按钮点击事件
PyQt5系列教程(14):复选框
PyQt5系列教程(28): QLineEdit 2
PyQT5 QTableView显示绑定数据简单示例
PYQT5中QTableWidget的使用!