阶段性放弃 wxPython 前的总结
为了实现一个管理本地电子书的程序,搞了一段时间 GUI,使用 wxPython。
实在难以适应和习惯,也搞不出什么太好看的效果。
最不能忍受的是,多线程处理能力太弱。遂决定放弃 GUI。
放弃之前,整理一点笔记。
1. GUI 的基本原理与框架
GUI 的核心都是基于事件编程,开启一个loop,不停的监听事件。
监听到事件以后,交给对应的 handler 来处理。
wxPython 中,需要有一个 wx.App 和 至少一个 Frame。
wx.App 管理程序的生命周期,比如,开启一个 loop。
wx.Frame 内添加各种控件 widgets 控制样式和具体的行为。
GUI 中的窗口,除了wx.Frame,还是wx.Dialog, wx.Dialog 多为 Modal 模式。
Modal 模式,即阻塞了别的窗口部件接收用户事件,直到该模式对话框被关闭。
二者在使用和运行机制上,略有差别,参见 wxPython Modal Dialog 模式对话框
2. GUI 的多线程
GUI的操作必须发生在主线程或应用程序的主循环所处的地方中。
在一个单独的线程中执行GUI操作,容易导致无法预知的程序崩溃,而且难以调试。
基于技术方面的原因,
如许多Unix的GUI库不是线程安全性的,以及在微软Windows下UI对象的创建问题,
wxPython没有设计它自己的发生在多线程中的事件。
我们自己最好也不要尝试。
后台执行长时间运行的程序,并在界面上显示进度。
实现的原理如下图:
在 main_thread 上创建子线程,用于执行长时间运行的程序。
子线程只负责给 main_thread(UI 线程)发消息,而不关心 GUI 的更新。
主线程响应子线程触发的事件,不如,更新 UI。
最简单的实现方式是,
子线程调用 wx.CallAfter(func, (args)) 注册新事件,并将 func 注册到新事件的处理句柄中。
新消息执行时,func 在主线程中执行并更新UI。
也可以自定义事件,自定义处理句柄。
3. sizer 控制样式
sizer 内可以直接 Add(seizer), 像 Add 其他控件一样。
最终需要把主 sizer SetLayout 即可。
4. 使用 ObjectListView 处理列表展示的需求,很舒服。
阶段性放弃 wxPython 前的总结的更多相关文章
- web系统是否要前后端分离?
开发一个web管理系统,是否要采用如今流行的前后端分离模式? 首先要从为什么会出现前后端分离说起,前后端分离的目的. 1.让前端工程师(前端)和后端工程师(后端)们能够更加专注于自己的领域 传统的开发 ...
- 掘金 Android 文章精选合集
掘金 Android 文章精选合集 掘金官方 关注 2017.07.10 16:42* 字数 175276 阅读 50053评论 13喜欢 669 用两张图告诉你,为什么你的 App 会卡顿? - A ...
- SpringBoot接入轻量级分布式日志框架(GrayLog)
我是3y,一年CRUD经验用十年的markdown程序员常年被誉为优质八股文选手 前两天我不是发了一篇数据链路追踪的文章嘛,在末尾也遗留了TODO:运行应用的服务器一般是集群,日志数据会记录到不同的 ...
- css中的负边距
css中的负边距(negative margin)是布局中的一个常用技巧,只要运用得合理常常会有意想不到的效果.很多特殊的css布局方法都依赖于负边距,所以掌握它的用法对于前端的同学来说,那是必须的. ...
- PHP任意文件包含绕过截断新姿势
前言 此方法是@l3m0n叔叔给我分享的,原文已经发布在90sec 我没有90sec的账号,所以自己实践一下,顺道安利给访问我博客的小伙伴. 适用情况 可以控制协议的情况下,如果%00无法截断包含,可 ...
- Week2 Bing词典Android客户端案例分析
一.软件调研 运行平台:Android 4.4.4 必应版本:5.2.2 1.bug发现 1.1 bug标题:单词挑战无法加载和刷新 bug详细描述:学习界面中的单词挑战模块,点击后没有任何反映,并且 ...
- Fedora 11中用MinGW编译Windows的Qt4程序(在Linux系统下编译Windows的程序)
Ubuntu下可以直接安装: sudo apt-get install mingw32 mingw32-binutils mingw32-runtime 安装后编译程序可以: i586-mingw32 ...
- Linux和Windows之间传递文件
由于自己的计算机的性能不足,代码只能在服务器上运行,要把代码搬到服务器上运行在没有root权限的情况下,本身就是一件不太容易的事情,我准备下次再写一下这方面的技巧.这篇博客,我只说比较一下几种在不同操 ...
- 负MARGIN之讲解
css中的负边距(negative margin)是布局中的一个常用技巧,只要运用得合理常常会有意想不到的效果.很多特殊的css布局方法都依赖于负边距,所以掌握它的用法对于前端的同学来说,那是必须的. ...
随机推荐
- Rating
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission ...
- 数据结构笔记02:Java面试必问算法题
1. 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的 ...
- C#当前应用程序路径及环境变量
一.获取当前文件的路径 1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 获取模块的完整路径.可获得当前执行的 ...
- linux -时间
cal查看日历 date查看当前系统时间 date -s“”修改系统时间 date +格式化系统时间 date +"%Y%m%d%H%M%S"
- [设计模式]<<设计模式之禅>>关于单例模式
1 我是皇帝我独苗 自从秦始皇确立了皇帝这个位置以后,同一时期基本上就只有一个人孤零零地坐在这个位置.这种情况下臣民们也好处理,大家叩拜.谈论的时候只要提及皇帝,每个人都知道指的是谁,而不用在皇帝前 ...
- 关于修改Eclipse工作空间对应的文件夹名称之后的处理.
把文件夹名字从"xhkong"变成"xhkong(maintenance5.6)"之后打开这个工作空间. 导入git仓库我发现了一个之前没有发现的小技巧. 导入 ...
- 24小时学通Linux内核之如何处理输入输出操作
真的是悲喜交加呀,本来这个寒假早上8点都去练车,两个小时之后再来实验室陪伴Linux内核,但是今天教练说没名额考试了,好纠结,不过想想就可以睡懒觉了,哈哈,自从大三寒假以来还没睡过懒觉呢,现在也有更多 ...
- Linux系统调用(转载)
目录: 1. Linux系统调用原理 2. 系统调用的实现 3. Linux系统调用分类及列表 4.系统调用.用户编程接口(API).系统命令和内核函数的关系 5. Linux系统调用实例 6. Li ...
- Python_sklearn机器学习库学习笔记(五)k-means(聚类)
# K的选择:肘部法则 如果问题中没有指定 的值,可以通过肘部法则这一技术来估计聚类数量.肘部法则会把不同 值的成本函数值画出来.随着 值的增大,平均畸变程度会减小:每个类包含的样本数会减少,于是样本 ...
- Android Studio 快捷方式
Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码(如g ...