2018-09-28 用Python3和tkinter开发简单图形界面程序

源码库: program-in-chinese/wubi_code_editor
起因在这里. 由于此项目和汉字相关, 个人也想尝试Python的图形界面开发, 于是开始尝试.
遇到的一个坑. 用户测试时, 发现png图片加载不了, 后发现是由于tkinter版本问题: Tkinter.PhotoImage doesn't not support png image
现在还处于原型状态, 两百多行代码都在一个文件中. 几个主要问题:
- 界面需要分离, 与界面无关的部分需要添加测试用例
- 文件路径只支持Linux/Mac, 还需支持Windows, 参考: Python 3 Quick Tip: The easy way to deal with file paths on Windows, Mac and Linux
- 完善功能: 支持对缺失数据的添加, 按编码范围导出到不同文件(出处); 按字搜索; 笔顺数据; Unicode 编码区
- 在VS code下开发, 还没使用测试/调试相关功能. 参考: Python in Visual Studio Code
源码节选:
读入csv源数据:
def 读入源数据文件(self, 文件名):
# 官方文档参考: https://docs.python.org/3/library/csv.html#module-contents
with open(文件名, newline='') as 源数据文件:
源数据读取器 = csv.reader(源数据文件, delimiter=',')
for 行 in 源数据读取器:
self.字符列表.append(行)
导出csv文件:
def 导出文件(self):
with open(常量_修改后文件, 'w', newline='') as 目标文件:
写文件 = csv.writer(目标文件, delimiter=',')
for 字符 in self.字符列表:
写文件.writerow(字符)
print("修改保存到: " + 常量_修改后文件)
创建图片显示:
# 显示图片, 参考: https://stackoverflow.com/questions/35024118/how-to-load-an-image-into-a-python-3-4-tkinter-window
def 创建图片显示(self, 区域, 字体名, 位置):
字体区 = Frame(区域)
字体区.pack(side = 位置)
字体提示 = Label(字体区, text = 字体名)
字体提示.pack()
图片路径 = 常量_图片主目录 + 常量_图片路径[字体名] + self.图片子路径
print(图片路径)
try:
图片 = PhotoImage(file=图片路径)
except:
print("找不到图片")
图片 = PhotoImage()
图片显示 = Label(字体区, image=图片)
图片显示.image = 图片
图片显示.pack()
return 图片显示
----------- 10/1/2018 更新 ------------
功能和重构基本完成. 还剩下一个问题"文件路径只支持Linux/Mac, 还需支持Windows", 由于题主只在Linux下使用, 暂不打算实现.
经过添加测试, 发现了几个bug.
承蒙题主宣传: 感谢 xuanwu 制作五笔编码编校软件 Python 版 - V2EX
---------- 12/24/2018 更新 ----------
上个月题主提交了好几个PR, 很高兴看到原本的纯用户成为了合作者. 最近的在国内原创开源项目中使用中文命名的意义与方式一文也受了这个实例的启发.
2018-09-28 用Python3和tkinter开发简单图形界面程序的更多相关文章
- 在ubuntu上使用wxWidgets成功开发一个图形界面程序
编译wxWidgets 下载最新版的源码,wxWidgets-3.0.2.wxWidgets在liunx是通过wxGTK实现的.wxGTK和wxWidgets的源码打包在一起.wxGTK依赖GTK+, ...
- python3+opencv+tkinter开发简单的人脸识别小程序
学校里有门图像处理的课程最终需要提交一个图像处理系统, 正好之前对于opencv有些了解,就简单的写一个人脸识别小程序吧 效果图如下 笔者IDE使用Pycharm,GUI编程直接使用内置的tkinte ...
- Delphi - 让Delphi10.2在Windows下开发的图形界面程序运行在64位Linux中!
FmxLinux官网:https://fmxlinux.com/ 参考: http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Linux_Applica ...
- 使用开源工具MonoDevelop开发GTK#图形界面
转自:http://developer.51cto.com/art/201011/235040.htm Mono一直到现在的2.8已经完全可以胜任一些比较小的项目了,但相关的开发文档与教程一直比较匮乏 ...
- 在桌面Linux环境下开发图形界面程序的方案对比
在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的 ...
- 使用PyQt进行Python图形界面程序开发文章目录
☞ ░ 前往老猿Python博文目录 ░ PyQt入门知识原来是作为老猿Python<Python基础教程目录>后的进阶学习章节存在,最近不少专栏作者提醒老猿整体的博文内容不错,但博文没有 ...
- 第十五章 使用PyQt进行Python图形界面程序开发
在基础知识部分的最后一章<第十三章 Python基础篇结束章>的<第13.3节 图形界面开发tkinter>简单介绍了Python内置图形界面标准库tkinter,当时特别强调 ...
- 用Nim语言开发windows GUI图形界面程序
前言 本文得到了“樂師”的大力支持, 我们一起调试程序到深夜,要是没有他的帮忙, 我不知道要多久才能迈过这道坎, 另外“归心”还有其他人也提供了帮助, 他们都来自于QQ群:“Nim开发集中营”4693 ...
- 第一章 开发简单Java应用程序
1. 什么是程序? 程序一词来自生活,通常指完成某些事务的一种既定方式和过程(一组有序指令的集合). 2. Java的三个领域? Java SE:java技术核心(指桌面应用程序)如:QQ.百 ...
随机推荐
- 微信小程序的wx-charts插件-tab选项卡
微信小程序的wx-charts插件-tab选项卡 效果: //index.js var wxCharts = require('../../utils/wxcharts-min.js'); const ...
- apollo入门demo实战(二)
1. apollo入门demo实战(二) 1.1. 下载demo 从下列地址下载官方脚本和官方代码 https://github.com/nobodyiam/apollo-build-scripts ...
- PowerShell 实现批量下载文件
简介 批量文件下载器 PowerShell 版,类似于迅雷批量下载功能,且可以破解 Referer 防盗链 源代码 [int]$script:completed = 0 # 下载完成数量 [int]$ ...
- Oracle SQL调优记录
目录 一.前言 二.注意点 三.Oracle执行计划 四.调优记录 @ 一.前言 本博客只记录工作中的一次oracle sql调优记录,因为数据量过多导致的查询缓慢,一方面是因为业务太过繁杂,关联了太 ...
- SpringMVC FistMVC详解
实现一个简单的SpringMVC框架的配置 1.依赖 这是mybatis+spring+现在需要的依赖 <dependency> <groupId>junit</grou ...
- 利用vi编辑器创建和编辑正文文件(一)
1. vim是vi的升级版本. 2. vi所UNIX和Linux系统内嵌的标准文编辑器,可执行,修改,复制,移动,粘贴和删除正文等命令,也可以进行移动光标,搜索字符和退出vi的 ...
- 剑指offer【06】- 旋转数组的最小数字(java)
题目:旋转数组的最小数字 考点:查找和排序 题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4, ...
- 细读 php json数据和JavaScript json数据
关于JSON的优点: 1.基于纯文本,跨平台传递极其简单: 2.Javascript原生支持,后台语言几乎全部支持: 3.轻量级数据格式,占用字符数量极少,特别适合互联网传递: 4.可读性较强 5.容 ...
- 解决关于 vue项目中 点击按钮路由多了个问号
问题描述: 在vue项目开发过程中,点击按钮结果页面刷新了一遍 后来发现路径变成了 localhost:8080/?#/login 原因: 这里是 form 表单,点击了button 按钮,触发了他的 ...
- java提高(6)---Serializable
Serializable--初解 一 序列化是干什么的? 我们知道,在jvm中引用数据类型存在于栈中,而new创建出的对象存在于堆中.如果电脑断电那么存在于内存中的对象就会丢失.那么有没有方法将对象保 ...