使用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$
    使用PyQT进行可视化编程

PyUIC

(Python自带的工具)

  • PyCharm配置
  • Program参考C:\ProgramData\Anaconda3\Scripts\pyuic5.exe
  • Arguments填入$FileName$ -o $FileNameWithoutExtension$.py
  • Working directory填入$FileDir$
    使用PyQT进行可视化编程

实现步骤

  • 项目右键->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进行可视化编程

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的使用!