pycharm+pyside6+desinger实现查询汉字笔顺GIF动图

一、引言

这学期儿子语文期末考试有一道这样的题目:

这道题答案是B,儿子做错了选了C。我告诉他“车字旁”和“车”的笔顺是不一样的,因为二者有一个笔画是不一样的,“车字旁”下边那笔是“提”,而“车”字是“横”,规律就是先"横"后“竖”,先“竖”后“提”,类似的还有“牛字旁”和“牛”。

为了验证我的说法,我从网上又查了一下如下图1和图2所示。

图1 “车”和“车子旁”笔顺

图2 “牛”和“牛字旁”和笔顺

为了方便查询每个字的笔顺,我和儿子决定把他所学过的生字的笔顺GIF动图都保存下来,然后编写一个小程序,想查哪个字的时候一输入,就可以很快查到,不用再去网上搜索。

儿子最近再学C++,开始想用C++来编写,但是发现用dev-c编写显示GIF动图的资料比较少,也比较难实现。而用python的例子比较多,所以就决定用python来实现。经过几天的努力,基本实现了最初的基本想法,最终的效果如图所示。

本程序简要说明:在文本编辑框中输入一个汉字,单击“查询”按钮,如果程序中含有这个汉字的动图,那么就会在屏幕中进行播放。下边就把实现的过程做个介绍。

二、Python与PyCharm

Python是一种脚本语言‌。脚本语言(Scripting language)是一种电脑编程语言,通常以简单的方式快速完成某些复杂的事情。Python是一种解释型的脚本语言,这意味着它的代码在运行之前不需要显式的编译步骤,而是通过解释器逐行解释执行。Python语言具有易学易用、开发效率高、运行速度快等优点,因此在数据科学、人工智能、Web开发、游戏开发等领域都有广泛的应用。本文用的python版本是3.12.1。

图3 python 3.12

‌PyCharm‌是由JetBrains开发的一个专门为Python设计的IDE,带有一整套用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。它支持多种Python版本,包括Python 3.5及更高版本。本文用的pycharm版本是2024.1.1。

图4 pycharm 2024.1.1

在使用PyCharm进行Python开发时,需要配置Python环境,以便PyCharm能够找到Python解释器并执行Python代码。PyCharm支持Python 2.x和Python 3.x版本,用户可以根据自己的需要选择不同的Python版本进行开发。此外,PyCharm还提供了丰富的插件和扩展,帮助用户增强开发体验和提高开发效率。

三、PySide6及其自带的designer

PySide6是Qt for Python的一部分,是一个Python绑定库,用于创建跨平台的GUI应用程序。PySide6是QT company官方维护的项目,支持LGPL协议,适用于开源和商业用途‌。PySide6自带了一个可以手动设计UI的designer,方便设计,并且可以直观看到界面的最终效果。一般的UI设计,是先用designer设计出界面,然后再把UI转成python语言格式,用pycharm平台进行功能代码的编写。

本文默认pycharm和python已经安装完成,从安装PySide6开始介绍。

pip install PySide6 -i https://pypi.tuna.tsinghua.edu.cn/simple

下载的目录默认在python安装的目录下的\Lib\site-packages\PySide6文件夹内。

找到PySide6安装目录,打开designer应用程序,如图5所示。

图5 designer位置

四、程序实现步骤

4.1 创建pycharm工程文件

打开pycharm软件,如果是第一次使用,那么界面如下图所示。操作步骤如下:

单击“New Project”,如图6所示。

图6 pycharm初始界面

在图所示的页面中填入工程名称(Name),本例的名称为“mystroke”,选择工程存放的地址(Location),并选择python版本,然后点“Create”按钮,如图7所示。

图7 创建新工程

创建好的工程如图8所示。

图8 工程创建完成

4.2 UI设计步骤

UI设计使用PySide6自带的designer。

4.2.1在pycharm中引入designer做为外部工具

第一步:在菜单“File”中选择“Settings”选项,如图9所示。

图9  选择Settings

第二步:在“Settings”页面中,选择“Tools”项目下的“External Tools”选项,点右侧列表左上角的“+”号,添加外部工具,如图10所示。

图10 选择External Tools

第三步:在Create Tool对话框中,填好外部程序的名称(Name),选择外部程序pyside6下的designer.exe的所在位置(Program),然后单击“OK”按钮,如图11所示。注意,一定要先填名字后选程序位置,名字可以随便取。

图11  添加designer外部工具

此时,在External Tools的列表框中出现了刚刚添加的Pyside6Designer。

第四步:在pycharm中打开Pyside6Designer。在“Tools”菜单中,选择“External Tools”下的Pyside6Designer,即可打开Designer,如图12所示。

图12 打开designer

4.2.1 利用designer设计UI

第一步:创建窗体。打开designer后,选择“Main Window”,然后单击“创建”,如图13所示。

图13  选择Main Window

第二步:在窗体上添加一个文本编辑框。在页面左侧“窗口部件盒”中选择Line Edit对象,并拖动到窗体上,如图14所示。

图14  添加文本编辑框

第三步:在窗体上添加一个按钮。在页面左侧“窗口部件盒”中选择Push Button对象,并拖动到窗体上,如图15所示。

图15  添加按钮

第四步:在窗体上添加一个动图显示框。在页面左侧“窗口部件盒”中选择Label对象,并拖动到窗体上,如图16所示。

图16  添加label对象

第五步:在右侧对象检查器中查看三个对象的名称,图中红框中第一列是对象名字,第二列是所属类名,如图17所示。

图17  对象列表

第六步:修改lineEdit的初始显示内容。在窗体上选中lineEdit对象,在右侧属性编辑器中text属性后的内容修改为“请输入要查询的字”,如图18所示。

图18  设置文本编辑框初始显示内容

第七步:选中pushButton,text属性修改为“查询”,如图19所示。

图19  设置按钮显示文字

第八步:清空label的text属性内容,如图20所示。因为网上下载的字笔顺动图的像素是600*600的,所以label的外框要拉大一些,然不然字的笔顺动图显示不全。

图20  清空label初始显示内容

第九步:把设计好的UI保存到pycharm创建的工程mystroke的目录下,UI的名称为mystroke_ui,如图21所示。

图21  保存UI到pycharm工程目录

4.3 准备字笔顺动图

在mystroke的工程目录下新建一个gif文件夹,如图22所示。

图22  在工程目录下创建gif文件夹

从网上搜索“爸笔顺”,找到爸字的笔顺动图,然后在动图上鼠标右键“将图像另存为”,然后把动图存放到gif文件夹内,如图23所示。

图23  下载汉字对应的笔顺动图

4.4 编写python代码

4.4.1 为pycharm工程文件添加python程序

在pycharm的mystroke工程名字上右键单击,在弹出菜单中选择“New”——"Python File",如图24所示。

图24  给pycharm工程添加python程序

在New Python file对话框中输入python程序名称为“mystroke”,文件类型选择“Python file”,然后按回车键,完成新建mystroke.py文件,如图25所示。

图25  确定程序名称和类型

完成新建后的页面如图26所示。

图26  添加python程序完成

4.4.2 编写mystroke.py代码

在新建的mystroke.py文件中输入以下代码:

import sys
from PySide6.QtCore import QFile, QIODevice, Slot
from PySide6.QtUiTools import QUiLoader
from PySide6.QtWidgets import QApplication, QMainWindow, QMessageBox, QPushButton, QTextBrowser
from PySide6.QtGui import QMovie# 定义主窗口类
class MainWindow(QMainWindow):def __init__(self):super().__init__()# 加载UI文件loader = QUiLoader()ui_file = QFile("mystroke_ui.ui")if not ui_file.open(QIODevice.ReadOnly):print("无法打开UI文件")sys.exit(-1)# 加载UI文件并实例化为窗口对象self.window = loader.load(ui_file)# 关闭UI文件ui_file.close()# 获取UI文件中的小部件对象self.button1 = self.window.findChild(QPushButton, "pushButton")self.lineEdit = self.window.findChild(QLineEdit, "lineEdit")self.label = self.window.findChild(QLabel, "label")# 连接信号和槽self.button1.clicked.connect(self.bt_transmit_click)# 按钮点击事件处理函数@Slot()def bt_transmit_click(self):#创建一个movie对象,用于播放GIF动图self.movie = QMovie("./gif/"+self.lineEdit.text()+".gif")#在label中设置movieself.label.setMovie(self.movie)#播放movieself.movie.start()# 主程序
if __name__ == "__main__":# 创建一个QApplication对象,它是PySide6应用程序的核心,负责处理事件和管理应用程序的生命周期。app = QApplication([])# 创建一个MainWindow对象,即主窗口类的实例。main_window = MainWindow()# 调用主窗口对象的show()方法,将主窗口显示在屏幕上。main_window.window.show()# 启动应用程序的事件循环,使得应用程序能够响应用户的输入和系统事件,保持运行状态。app.exec()

4.4.2 mystroke.py核心代码的解读

第一部分:加载UI程序段。UI文件的加载程序如下所示,把用pyside6 designer设计的界面“mystroke_ui”加载到python程序中来,然后把原UI文件关闭。

    # 加载UI文件loader = QUiLoader()ui_file = QFile("mystroke_ui.ui")if not ui_file.open(QIODevice.ReadOnly):print("无法打开UI文件")sys.exit(-1)# 加载UI文件并实例化为窗口对象self.window = loader.load(ui_file)# 关闭UI文件ui_file.close()

第二部分:获取UI中控件对象程序段。获取UI中控件对象的方法为self.window.findChild ,该方法是一个在 PySide6 中用于查找窗口子部件的方法,它的基本语法是:

childObject = self.window.findChild(class_type, name)

该方法有两个参数,第一个参数是部件的类型,第二个参数是UI上部件的名称。

本文UI上一共有三个部件:一个pushButton,一个lineEdit,一个label,获取的代码如下:

    # 获取UI文件中的小部件对象self.button1 = self.window.findChild(QPushButton, "pushButton")self.lineEdit = self.window.findChild(QLineEdit, "lineEdit")self.label = self.window.findChild(QLabel, "label")

第三部分:信号和槽绑定程序段

PySide6中的信号和槽机制是一种用于对象间通信的机制。信号(Signal)是在特定事件发生时由对象发出的消息,而槽(Slot)是用于接收并处理这些信号的函数。信号和槽机制允许对象在事件发生时进行交互,而不必了解彼此的具体实现,从而实现了低耦合的通信方式。

本例的信号和信号接收槽各有一个,信号就是单击pushButton,槽里的接收函数也只有一个。信号和槽函数绑定的程序如下图所示。

 # 连接信号和槽self.button1.clicked.connect(self.bt_transmit_click)

第四部分:槽函数程序段

槽函数bt_transmit_click(self)函数体一共有三行,如图所示。

    # 按钮点击事件处理函数@Slot()def bt_transmit_click(self):#创建一个movie对象,用于播放GIF动图self.movie = QMovie("./gif/"+self.lineEdit.text()+".gif")#在label中设置movieself.label.setMovie(self.movie)#播放movieself.movie.start()

第一行,给movie设置了GIF动图的地址,这个地址是各字符串形式,由三部分拼接而成。第一部分“./gif/”是指明动图的存放文件夹为“gif”;第二部分self.lineEdit.text(),是取编辑框内文字,也就是动图的名称;第三部分是动图的后缀".gif"。

第二行,使用 setMovie 方法将 QMovie 对象设置到 QLabel 上。

第三行,播放movie,也就是播放GIF动图。

(本文结束)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/67388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2018年西部数学奥林匹克几何试题

2018G1 在 △ A B C \triangle ABC △ABC 中, O O O 为外心, M M M 为边 B C BC BC 的中点, 延长 A B AB AB 交 ( A O M ) (AOM) (AOM) 于点 D D D, ( A O M ) (AOM) (AOM) 交 A C AC AC 于点 E E E. 求证: E C D M ECDM ECDM. 证明: 设点 G G G 为 △ A B C …

C++ QT中Q_Q和Q_D是什么?怎么使用?本质是什么?C++仿写

1.QT中Q_Q和Q_D是什么? Q_Q可以得到外部可以访问的类指针Q_D可以得到内部封装,外部不可达的类指针2. 怎么使用? 上代码 APrivate.h#pragma once #include <QtCore>class A;class APrivate {Q_DECLARE_PUBLIC(A) public:APrivate();~APrivate(); public:void APrivate…

宇泰串口卡驱动在Ubuntu22.04编译、安装汇总

从官网下载驱动官网地址 上传到Ubuntu, 目录结构如下&#xff1a; 驱动源代码: 驱动代码是基于开源项目编译来的 编译路径不能有中文路径&#xff0c;否则可能有类似错误 源码是基于Linux2.3内核编译&#xff0c;我当前是6.8.0-51&#xff0c;数据结构有升级&#xff0c;需要调…

WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测

WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测 目录 WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于WOA-CNN-GRU-Attention、…

广播网络实验

1 实验内容 1、构建星性拓扑下的广播网络,实现hub各端口的数据广播,验证网络的连通性并测试网络效率 2、构建环形拓扑网络,验证该拓扑下结点广播会产生数据包环路 2 实验流程与结果分析 2.1 实验环境 ubuntu、mininet、xterm、wireshark、iperf 2.2 实验方案与结果分析…

人参t2t基因组-文献精读100

Telomere-to-telomere reference genome for Panax ginseng highlights the evolution of saponin biosynthesis 人参的端粒到端粒参考基因组揭示皂苷生物合成的进化 摘要 人参&#xff08;Panax ginseng&#xff09;是中药的代表性植物之一&#xff0c;并在全球范围内广泛使…

深度学习基础--GRU学习笔记(李沐《动手学习深度学习》)

前言 GRU是RNN模型的升级版&#xff0c;也是LSTM的弱化版&#xff0c;学习GRU也是为了学习LSTM做准备&#xff0c;这一篇文章是学习笔记&#xff1b;RNN&#xff1a;RNN讲解参考&#xff1a;李沐动手学习深度学习&#xff1b;欢迎收藏加关注&#xff0c;本人将会持续更新。 文…

unity学习17:unity里的旋转学习,欧拉角,四元数等

目录 1 三维空间里的旋转与欧拉角&#xff0c;四元数 1.1 欧拉角比较符合直观 1.2 四元数 1.3 下面是欧拉角和四元数的一些参考文章 2 关于旋转的这些知识点 2.1 使用euler欧拉角旋转 2.2 使用quaternion四元数,w,x,y,z 2.3 使用quaternion四元数,类 Vector3.zero 这种…

Three.js计算机与反射艺术相结合

反射-CSDN直播反射映象https://live.csdn.net/v/460090 一.CSS部分 body {margin: 0;padding: 0;height: 100vh;overflow: hidden;display: flex;align-items: center;justify-content: center;background: black; }二.JS部分 //wccchallenge - reflection //reflection for…

PDF文件提取开源工具调研总结

概述 PDF是一种日常工作中广泛使用的跨平台文档格式&#xff0c;常常包含丰富的内容&#xff1a;包括文本、图表、表格、公式、图像。在现代信息处理工作流中发挥了重要的作用&#xff0c;尤其是RAG项目中&#xff0c;通过将非结构化数据转化为结构化和可访问的信息&#xff0…

从AI生成内容到虚拟现实:娱乐体验的新边界

引言 在快速发展的科技时代&#xff0c;娱乐行业正经历一场前所未有的变革。传统的娱乐方式正与先进技术融合&#xff0c;创造出全新的沉浸式体验。从AI生成的个性化内容&#xff0c;到虚拟现实带来的身临其境的互动场景&#xff0c;科技不仅改变了我们消费娱乐的方式&#xf…

pthread_create函数

函数原型 pthread_create 是 POSIX 线程&#xff08;pthread&#xff09;库中的一个函数&#xff0c;用于在程序中创建一个新线程。 #include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *a…

《offer 来了:Java 面试核心知识点精讲 -- 原理篇》

在 Java 面试的战场上&#xff0c;只知皮毛可不行&#xff0c;面试官们越来越看重对原理的理解。今天就给大家分享一本能让你在面试中脱颖而出的 “武林秘籍”——《offer 来了&#xff1a;Java 面试核心知识点精讲 -- 原理篇》。 本书详细介绍了Java架构师在BAT和移动互联网公…

家政服务小程序,打造智慧家政新体验

春节即将来临&#xff0c;家政市场呈现出了火热的场景&#xff0c;大众对家政服务的需求持续增加。 近年来&#xff0c;家政市场开始倾向数字化、智能化&#xff0c;借助科学技术打造家政数字化平台&#xff0c;让大众在手机上就可以预约家政服务&#xff0c;减少传统家政市场…

vim练级攻略(精简版)

vim推荐配置: curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh 0. 规定 Ctrl-λ 等价于 <C-λ> :command 等价于 :command <回车> n 等价于 数字 blank字符 等价于 空格&#xff0c;tab&am…

Java-数据结构-二叉树习题(1)

对于二叉树的学习&#xff0c;主要的还是得多多练习~毕竟二叉树属于新的知识&#xff0c;并且也并不是线性结构&#xff0c;再加上经常使用递归的方法解决二叉树的问题&#xff0c;所以代码的具体流程还是无法看到的&#xff0c;只能通过画图想象&#xff0c;所以还是必须多加练…

PCL K4PCS算法实现点云粗配准【2025最新版】

目录 一、算法原理1、算法概述2、算法流程3、参考文献二、 代码实现1、原始版本2、2024新版三、 结果展示本文由CSDN点云侠原创,原文链接,首发于:2020年4月27日。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 博客长期更新,本文最近一次更新时间为…

09-1_信号量的理论讲解

09-1_信号量的理论讲解 信号量是操作系统中的一种同步和互斥机制&#xff0c;它通过一个计数值来表示资源的数量。通过这种方式&#xff0c;信号量可以有效地协调不同任务之间的资源使用。今天我们将深入学习信号量的基本概念、分类以及如何使用它们。 1. 信号量的基本概念 …

基于SSM汽车美容管家【提供源码+答辩PPT+文档+项目部署】(高质量源码,可定制,提供文档,免费部署到本地)

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

Android 调用系统服务接口获取屏幕投影(需要android.uid.system)

媒体投影 借助 Android 5&#xff08;API 级别 21&#xff09;中引入的 android.media.projection API&#xff0c;您可以将设备屏幕中的内容截取为可播放、录制或投屏到其他设备&#xff08;如电视&#xff09;的媒体流。 Android 14&#xff08;API 级别 34&#xff09;引入…