PyQt5 学习笔记(tkinter 与 PyQt5 的比对)

查看 98|回复 9
作者:jumpbull   
一、tkinter 与 PyQt5 的个人见解
刚开始学 python 时,很多人都会选用 tkinter,因为能直接使用,而 PyQt5 还需要安装,其带的设计器又藏得很深,更是让初学者望而却步。后面用惯了 tkinter 觉得够用,也就不想换了。我就是典型的例子,直到最近空闲了主动去学习 PyQt5 后,才后悔没早点使用。
这篇文章比较适合还在使用 tkinter 的人,当然准备入手 PyQt5 的也可以看看,了解一下它们的差异还是很有必要的。
tkinter 与 PyQt5 的区别网上到处都有说,这里就不再细究了,就直接说自己的感受吧。如果你还在使用 tkinter的,或者准备入手学习 tkinter 的,请抓紧时间向 pyQt5 转型吧,PyQt5 入门的难度并不大,与 tkinter 差不多,但对窗口、小部件的控制能力比 tkinter 强太多了,而且也提供了 QtDesigner 界面设计工具,可以实现界面也代码分离,能随时修改软件界面而不影响逻辑代码。
我用 tkinter 写了不少工具,如果当时使用 PyQt5 的话,肯定能多出更多的功能,界面也更加好用。还是要找时间把工具升级成 pyQt5 版本的了。
二、PyQt5 安装使用步骤
原没有学习 PyQt5 的原因就是找不到好的教程,零零散散地接触了一些,没发现比 tkinter 好用就放弃了。为了不让大家走我的老路,我就 PyQt5 从安装到使用还有一些常用的语句方法进行总结,再与 tkinter 进行对比。
我用的编写环境是微软的 VSCode ,使用其他环境的也没关系,使用方法都一样的。
1、安装PyQt5
安装很简单,在PowerShell 命令行中执行下面命令即可(在开始菜单中右键即可找到,Win11 改为终端管理员)
[PowerShell] 纯文本查看 复制代码pip install PyQt5  -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pyqt5-tools  -i https://pypi.tuna.tsinghua.edu.cn/simple
第一行是安装 PyQt5 模块,第二行是安装其工具,如 QtDesigner
后面的 -i https://pypi.tuna.tsinghua.edu.cn/simple 表示从国内镜像服务器下载,速度不是一般的快
与软件安装不同的是,QtDesigner 安装完后并不会有快捷键什么的,需要自己手动创建,不然每次使用都要找半天。QtDesigner 位于 Lib\site-packages\qt5_applications\Qt\bin 目录中,找到 designer.exe 文件,可以添加到开始菜单中或在桌面创建快捷键。其完整的路径如下:
C:\Users\xxxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\qt5_applications\Qt\bin
xxxx 表示系统当前的用户名
这时你已经可以使用 PyQt5了,刚开始学习时,不建议马上用 QtDesigner ,建议用代码试着写几个小程序试试,毕竟 PyQt5 与 tkinter 使用的方法差别太大,完全不是一个妈生的。可以从网上找一些简单的例子试运行并尝试修改,这里就不提供了。
2、使用时的注意事项
PyQt5 提供的类、方法、变量很多,几乎每种小部件都需要引用相应的类,为了方便,建议大家初学时在引用 PyQt5 时用都用下面的代码
[Python] 纯文本查看 复制代码import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
PyQt5.QtWidgets 是定义窗口和小部件的,PyQt5.QtGui 是与界面有关的如图标、图片等,PyQt5.QtCore 为常用的 Qt 变量等,这样引用就不需要每使用一个类就要添加相关的类。
刚开始学习时,建议用代码直接生成界面,这样容易理解各代码的意义。在准备入手编写项目时,就建议使用 QtDesigner 设计器了,使用设计器制作的 ui 文件不能直接使用,需要用命令行转换成 py 代码后才能使用。转换后的 py 文件可以直接修改使用,也可以做为独立的界面文件在主逻辑文件中引用(建议采用这种方式,能随时修改界面且不影响逻辑代码,下一节将介绍如何实现)。
3、 QtDesigner 设计器
前面说了,QtDesigner 设计器安装完后,需要找到后手动添加快捷方式。QtDesigner 设计器功能还是很多的,建议找专门教程学习,靠自己摸索容易错过很多便捷的使用方法。这里提醒大家一点,其默认工具栏上的命令都很有用,特别是编辑信息/槽,用好了事半功倍。
设计好界面后保存为 ui 文件,建议将同项目的多个界面保存在同个目录中,备份项目时容易一起复制。用 QtDesigner 设计器制作的界面有三种用法:① 直接使用界面运行,需要转换为 py 代码文件后修改使用;② 界面与逻辑代码文件分离,将 ui 文件转换为 py 代码,优点是可在代码中做修改;③ 界面与逻辑代码文件分离,直接引用 ui 文件,缺点是只能在 QtDesigner 中修改,无法在代码模式修改。三种方法各有优缺点,大家根据情况选用。
将 ui 文件转换为 py 文件网上也有不少图形界面的工具,但我更建议使用自带的命令行转换工具,反正操作次数也不多,把命令注释在主逻辑文件前,随时可进行转换,也非常方便的
1)可直接运行界面文件
需要用下面的命令将 ui 转换为 py 文件,可打开 py 文件进行修改运行。
[PowerShell] 纯文本查看 复制代码pyuic5 -x  main_ui.ui -o main_ui.py
命令中 main_ui.py 为转换后的 py 文件名,main_ui.ui 为 QtDesigner 设计器保存的文件名,这两个文件建议使用完整路径,将不受当前路径的影响。
2)界面与代码分离,转换为 py 文件引用
界面与代码独立分离,修改时互不影响。转换时建议同项目的多个界面保存在同个目录中,与主逻辑代码文件存放一起便于引用,转换后的 py 代码是不能直接运行的,只能由主逻辑代码引用,但可以在界面 py 文件中做一些改动(注意若要 QtDesigner 再修改,原修改的代码会丢失)。
ui 转换为 py 命令,命令参数以上面的相同,建议使用完整路径,将不受当前路径的影响。
[PowerShell] 纯文本查看 复制代码pyuic5 -o main_ui.py main_ui.ui
转换好的界面文件由主逻辑文件引用,先是模块引用 ,然后在窗体类初始化时加上关键语句即可,示例如下:
[Python] 纯文本查看 复制代码from main_ui import Ui_MainWindow  # 主窗体界面 Ui_MainWindow  为 main_ui.py 中的类名
from sub_ui import Ui_Dialog  # 子对话窗口界面
...
class mainWindow(QMainWindow, Ui_MainWindow): # 主窗体,必须带上 Ui_MainWindow 做为参数
    def __init__(self):
        super().__init__()
        self.setupUi(self)  # 加载主窗体界面的关键语句
        ...
class subDialog(QDialog, Ui_Dialog): # 子对话窗口,必须带上 Ui_Dialog 做为参数
    def __init__(self, parent=None):
        super(subDialog, self).__init__(parent)
        self.setupUi(self)  # 加载子对话窗口界面的关键语句
        ...
3)界面与代码分离,直接引用 ui 文件
[color=]同样是主逻辑文件与界面文件分离,但不需要转换 ui 文件,直接由主逻辑文件引用 ui 文件,随时可用 QtDesigner 设计器修改窗体的 ui 文件,主逻辑文件甚至都可以不动,就可以完成界面的改动。主逻辑引用的方法如下:
[Python] 纯文本查看 复制代码from PyQt5 import uic  
class mainWindow(QMainWindow):# 主界面
    def __init__(self):
        super(mainWindow,self).__init__()
        uic.loadUi("main_ui.ui", self)  # 直接引用 ui 文件,可能需要文件完整路径
三、tkinter 与 PyQt5 结构比对
这里将对 tkinter 与 PyQt5 做比较全面的比较,如果你有在用 tkinter ,能根据比对快速掌握 PyQt5 的对应用法,实现快速上手。
1、tkinter 与 PyQt5 的主要差异
这是我总结出它们的主要差异,我也是刚入 PyQt5 的坑,很多方面还比较生疏,应该会有不少遗漏
[table][tr][td]对比

文件, 界面

jumpbull
OP
  

6、单选框(Radiobutton、QRadioButton)
PyQt5 在单选框上的使用就没 tkinter 方便,我先列个对比表,再给代码
[table][tr][td]类型
jumpbull
OP
  

四、小部件应用对比
这里将一些常用的小部件进行比对,包括定义、修改、事件等方面,可让大家快速转型上手。
1、共通部分
这里指 tkinter 、PyQt5 中所有小部件共同的设置方式,后面比对将不再单列
[table][tr][td]类型
ABuSiDeLuoYin   

感谢分享
xlaipojie   

感谢分享,学习了
Carlson20   

我以前只学过QT,c++的,pyqt还没写过,多学习学习
ThemanRonin   

PyQt6怎么样,各方面有升级
ThemanRonin   

个人开发一些小程序软件还是推荐用.NET吧,简单拖拽就能用,而且生成的程序的体积还小。
gaow2709   

PyQt6怎么样
xucs   

感谢分享
您需要登录后才可以回帖 登录 | 立即注册

返回顶部