PyQt5使用总结

最近用pyqt5开发了一个GUI小程序,在此做下总结~

安装

安装pyqt5和pyqt5-tools

pip install pyqt5
pip install pyqt5-tools

在PyCharm中集成PyQt

因为我使用PyCharm开发,所以将PyQt集成进去来提高效率, 操作步骤如下
1.打开【File->Settings->Tools->External Tools】
2.点击“+”号按钮,添加“designer”
在这里插入图片描述
说明:Program的内容是:
D:\PythonProjects\TDTool\venv\Lib\site-packages\qt5_applications\Qt\bin\designer.exe

3.再次点击“+”号按钮,添加“pyUIC”
在这里插入图片描述

说明:Program的内容是:
D:\PythonProjects\TDTool\venv\Scripts\pyuic5.exe
Arguments的内容是:
$FileName$ -o $FileNameWithoutExtension$.py

4.完成以上步骤后,我们在项目上"鼠标右键->External Tools",就可以看到designer和pyUIC
5.选择designer可以打开UI的设计界面,通过控件的拖拽完成界面设计,保存为*.ui文件
6.在*.ui文件上"右键->External Tools->pyUIC",将ui文件转化为python代码

编写界面控件的逻辑代码

1.启动界面

在完成ui文件到py文件的转换后,我们需要定义一个新的类来实现界面的功能,该类要继承界面类和界面类型类

from about import Ui_About
from PyQt5.QtWidgets import QDialog

class AboutDialog(QDialog, Ui_About):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

说明:“Ui_About”类是ui文件转py生成的,而我在用designer设计这个界面时,使用的是“QDialog”类型,调用"setupUi"方法初始化界面。

再运行以下代码,即可打开界面了

	import sys
	from PyQt5.QtWidgets import QApplication
	from PyQt5.QtCore import Qt, QCoreApplication
	
    QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling)	# 分辨率自适应
    app = QApplication(sys.argv)
    about = AboutDialog()
    about.show()
    sys.exit(app.exec_())

2.修改控件的属性

  • 只保留最小化和关闭(不支持界面最大化)
self.setWindowFlags(Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint)
  • 修改界面标题
self.setWindowTitle("TDTool")
  • 修改界面图标
self.setWindowIcon(QIcon(icon_path))
  • 表单控件-禁用自动行号
self.tableWidget.verticalHeader().setVisible(False)
  • 表单控件-设置某列宽度自适应
self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.tableWidget.horizontalHeader().setSectionResizeMode(0, QHeaderView.ResizeToContents)
  • 提示框
msg_box = QMessageBox(QMessageBox.Warning, "警告", str(e))
msg_box.exec_()

3.实现控件的动作

  • 按钮
self.start_button.clicked.connect(self.start)	# 在start中写要干的事
  • 下拉框
self.comboBox_func.currentIndexChanged.connect(self.show)		# 在show中写当下拉框序号改变时要干的事
  • 菜单中的action
self.action1.triggered.connect(self.show1)		# show1中写点击菜单中的action1要干的事

4.如果要干的事比较耗时,需要放到线程中去做,避免界面长时间无响应

实现qt线程只需要继承QThread并重写run方法

from PyQt5.QtCore import QThread, pyqtSignal

class DoSomethingThread(QThread):
    info_signal = pyqtSignal(str)	# 定义信号用于与主界面通信
    def __init__(self, *args):
       	super().__init__()

	def run(self) -> None:
		"""这里写线程要干的事"""
		self.info_signal.emit("hello world!")	# 发信号

mythread = DoSomethingThread()
mythread.info_signal.connect(doinfo)	# doinfo是处理信号的函数
mythread.start()

5.程序打包

参考pyinstaller打包pyqt程序

PyQt5文档

PyQt5中文教程
PyQt5官方教程

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值