wxPython界面开发总结
1、GUI编程概述
Python需要界面么?
大多数情况下是不需要的,但是如果要给非开发者用,那么有个界面还是必要的。只需要掌握一种基本的界面开发方法,就能应付大多数情况。
wxPython学习目标
界面编程并非Python核心,也不是它的优势,所以准备的是两天时间,选择一种Python的GUI来学习,基本就能满足需要了。
Python的界面实现方案很多,说说主流的三种方案,Tkinter(Python自带)太丑,pyQt太复杂,相对来说wxPython比较适中,也是我选择的方案。
定义的学习目标如下:
- 掌握wxPython的控件和基础用法,知道从哪儿找资料。
- 照着教程快速做几个小应用,熟悉wxPython的应用流程。
wxPython介绍
- wxPython是wxWidgets在Python语言下的封装。
- wxWidgets是一个跨平台的GUI 应用编程接口,使用C++编写。
- 图形界面风格与系统的风格相似。
- 编码风格类似于windows原生,复杂性低于pyQt
2、wxPython环境
直接开发,只需要安装wxPython就可以了
pip install -U wxPython
下载链接:http://www.wxpython.org/download.php#msw
wxPython也有一些可视化开发环境,比如:
- wxFormBuilder
- wxDesigner
- wxGlade
- BoaConstructor
- gui2py
ps:我尝试过一些,感觉不是很好用,还是直接敲代码更方便。
3、wxPython的基础
一个简单的界面应用程序构建步骤:
- 导入 wx 模块
- 定义应用程序类的一个对象
- 创建一个顶层窗口的 wx.Frame 类的对象。 给出构造标题和尺寸参数。
- 虽然其他控件可以在Frame对象加入,但它们的布局无法管理。因此,把一个Panel对象到框架。
- 添加一个静态文本对象,以显示 ‘Hello World’在窗口内的任意位置。
- 通过show()方法激活框架窗口。
最简单的例子:
import wxapp = wx.App()
window = wx.Frame(None, title="wxPython 你好!", size=(400, 300))
panel = wx.Panel(window)
label = wx.StaticText(panel, label="Hello World", pos=(100, 100))
window.Show(True)
app.MainLoop()
4、wxPython控件
wx.Frame
wx.Frame类是不带参数的默认构造函数。
wx.Panel
wx.Panel类通常是一个放入wxFrame中的对象。 这个类也继承自wxWindow类。
wx.StaticText
wx.StaticText类对象提供了一个控制持有比如只读文本。它可以被称作被动控制,因为它不产生任何事件。
TextCtrl
在wxPython中,wx.TextCtrl类对象用于于此目的。它控制在其中可以显示文本和编辑。
RadioButton & RadioBox
每个按钮,wx.RadioButton类的一个对象携带旁边有一个圆形按钮文本标签。wxPython的API还包括wx.RadioBox类。它的对象提供了一个边框和标签组。
wx.CheckBox
一个复选框显示一个小标记的矩形框。单击时,复选标记出现在矩形内,指示作出选择。
ComboBox & Choice Class
一个wx.ComboBox对象提供选择项目列表。它可以配置为一个下拉列表或永久性的显示。wxPython的API包含一个wx.Choice类,其目的也是一个下拉列表中,这是永久只读。
Wx.Gauge
Wx.Gauge类对象表示垂直或水平条,其中以图形方式显示递增量。
wx.Slider
wxPython的API包含wx.Slider类。它提供了滚动条相同的功能。滑动器提供了一个方便的方式来处理由滑块具体wx.EVT_SLIDER事件绑定拖动句柄。
wx.MenuBar
略低于顶层窗口的标题栏中的横条保留,以显示一系列菜单。这是wx.MenuBar类在wxPython API的对象。
wx.Toolbar
如果wx.Toolbar对象的样式参数设置为wx.TB_DOCKABLE,它成为可停靠。浮动工具栏还可以用wxPython中的AUIToolBar类构造。
wx.Dialog
虽然一个对话框Dialog类对象出现像Frame,它通常被用作上的父框架的顶部上的弹出窗口。一个对话框(Dialog)的目的是从用户收集一些数据并将其发送到父帧(frame)。
wx.Notebook
wx.Notebook小部件提供了一个标签式的控制。在一个帧(Frame)中的一个笔记本对象具有一个或多个切换标签(称为页),其中每一个具有一个面板显示出的控制布局。
wx.SplitterWindow
这个类的对象是一个布局管理器,它拥有两个子窗口,大小可以通过拖动它们之间的边界动态变化。分离器控制给出了可拖动来调整控件的句柄。
HTMLWindow
wxHTML库中包含用于解析和显示HTML内容。 虽然这不打算成为一个全功能的浏览器,wx.HtmlWindow对象是一个通用的HTML浏览器。
ListBox & ListCtrl
一个wx.ListBox控件呈现字符串的垂直滚动列表。 默认情况下,在列表中的单个产品选择。ListCtrl控件是一个高度增强列表显示和选择工具。多个列的列表可以显示在报表视图,列表视图或图标视图。
5、wxPython事件
函数或方法响应于点击按钮,调用事件选择相应的处理函数,用户的操作被执行。应用程序的运行时期间发生的某个事件数据被存储为来自wx.Event衍生的子类的对象。
例如,要调用一个按钮的点击事件的程序上的 OnClick()方法
self.b1.Bind(EVT_BUTTON, OnClick)
bind()方法是通过从wx.EvtHandler类的所有显示对象继承。EVT_BUTTON这里是绑定器,其中关联按钮单击事件的 OnClick()方法。
在wxPython中事件是两种类型的。基本事件和命令事件。大多数 wxWidgets生成命令事件。
基本事件
一个基本的事件停留在它起源的窗口。比如移动窗口的 OnMove 事件self.Bind(wx.EVT_MOVE, self.OnMove)
命令事件。
命令事件可以传播到一个或多个窗口,类层次结构来源于窗口上方。比如点击按钮的 OnButtonClicked)事件self.Bind(wx.EVT_BUTTON, self.OnButtonClicked)
6、wxPython布局
wxPython的布局又包含绝对布局和相对布局两种方式。绝对布局需要定义每一个控件的位置坐标,方法单一繁琐,很难实际应用。所以,主要的布局方式都是采用相对布局。wxPython提供了一系列的布局管理器,被称为Sizer,它们都继承至wx.sizer基类。
BoxSizer
sizer允许控件排放在按行或列的方式。BoxSizer布局是由它的定位参数(wxVERTICAL或wxHORIZONTAL)确定。
GridSizer
顾名思义,一个GridSizer对象呈现二维网格。控件被添加在网格槽以左到右和由上到下方顺序。
FlexiGridSizer
这种sizer 也有一个二维网格。它提供灵活性布局中的控制单元。
GridBagSizer
GridBagSizer是一种多功能sizer。它比FlexiGridSizer提供了更多的增强功能。子构件可被添加到网格中的指定单元格。
StaticBoxSizer
StaticBoxSizer把一个盒子sizer放到静态框。它提供了围绕框边界以及顶部标签。
7、多线程
在上面介绍中,我们都是在主线程操作,实际应用中,多线程是必要的:
- 不用多线程可能会导致图形界面卡死
- 多线程可以使程序以更高效率运行
- 多线程可以让程序做更多的事
简单用法:
import threading
def ThreadBatchUpLoad(self,arg):print("thread run")def Onclick(self,event):t1 = threading.Thread(target=self.ThreadBatchUpLoad, args=(event,))t1.start()
8、题外话
基本熟悉了wxPython了用法,但是开发的方便程度和界面的美观度,都是不满意的。从知乎、博客等各大渠道收集的信息来看,Python下如果要做界面展示和提供给普通用户使用,最好的方案是
Web前端+Python后端 = Python GUI应用
这才是最能发挥Python优势,效果也最好的方案。
9、参考网址
- wxPython官网
- wxFormBuilder工具
- wxPython语法教程
- -
wxPython界面开发总结相关推荐
- Python精确指南——第二章 界面开发
2 Python GUI 借助Python语言的优势,使用Python的界面库开发界面程序,开发周期更短.但因为Python的界面开发库底层实现一般不是Python,只是为Python封装的接口,所以 ...
- python界面开发工具-python图形界面开发用什么
作为Python开发者,你迟早都会用到图形用户界面来开发应用.本文将推荐一些 Python GUI 框架,希望对你有所帮助. Python 的 UI 开发工具包 Kivy(推荐学习:Python视频教 ...
- 实战tkinter图形界面开发_八款常用的 Python GUI 开发框架推荐
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 乔柯 PS:如有需要Python学习资料的小伙伴可以加点击下方链接 ...
- Python量化交易平台开发教程系列7-顶层GUI界面开发(1)
原创文章,转载请注明出处:用Python的交易员 前言 终于有时间来写第一篇顶层GUI界面开发相关的教程了,之前实在是事情太多,跟各位读者抱个歉. 整合底层接口的各项功能到中层引擎中后,当我们开发顶层 ...
- Python图形界面开发(一)——pyside入门
目录 前言 如果用 Python 语言开发 跨平台 的图形界面的程序,主要有3种选择: PySide2.PyQt5 都是基于著名的 Qt 库. 安装 PySide2 安装PyQt5 案例一 前言 众所 ...
- python界面开发工具哪个好_python图形界面开发用什么
作为Python开发者,你迟早都会用到图形用户界面来开发应用.本文将推荐一些 Python GUI 框架,希望对你有所帮助. Python 的 UI 开发工具包 Kivy Kivy是一个开源工具包能够 ...
- Python 图形界面开发哪个库好
Tkinter 是官方提供的图形界面开发库,用于封装Tk GUI工具包,跨平台,但是控件少,帮助文档不健全,不便于开发复杂的图形用户界面. b站小甲鱼有Tkinter的教程 PyQt 非官方提供的图形 ...
- Python图形界面开发教程-课程笔记-2022-2-14
目录 1.1 写一个弹窗 1.2了解模板代码的组成 1.3 根据模板代码写一个界面 1.4 窗口关闭事件 1.5 通过字典获取返回值values 1.6 自定义主题 1.7 自定义窗口 1.8 布局和 ...
- Python GUI界面开发软件综述
参考致谢: 28款Python GUI开发框架开源软件 https://www.cnblogs.com/muziyunxuan/archive/2017/12/26/8117875.html Py之G ...
最新文章
- java单例模式的实现方法_Java中的五种单例模式实现方法
- 确保nginx安全的10个技巧
- Android服务一 创建启动服务
- Andriod: 在xml布局中使用自定义属性
- java 建造者实际中的用法_java中j建造者模式详解和使用方法
- ARM Linux.2.6.34内核移植
- lnmp 1.4 mysql_lnmp1.4配置https教程
- 这家大厂手机业务也凉了 改做手表?官方回应让人放心了...
- AcWing 795. 前缀和
- java下面哪些定义正确_Java认证考试题
- 大一c语言常见编程题,自己整理的C语言常见编程题
- 对天敏电视精灵I老版播放器的修改和分析
- matlab不能使用syms,matlab syms什么意思
- 学了C语言,能开发什么项目?
- tomcat 报错 Too many open files
- Android免打包多渠道统计如何实现?通用流行框架大全
- Ubuntu22.04安装gcc-5和g++-5
- 愤世嫉俗的程序员,总在某乎发表言论,当起了“键盘侠”
- 婚宴座位图html5,婚宴酒席座位安排图 20桌婚宴座位安排图
- Spring:Webflux响应式编程
热门文章
- C语言中的结构体(struct)
- kaptcha的使用
- 阿里云ossutil使用
- java异步日志跟同步区别_AJAX中同步和异步的区别和使用场景
- Web安全1.3:Arachni扫描器安装、Burpsuit激活及https证书的导入
- 从业人员诚信信息管理系统
- 如何让设计师不成为机器_想要成为最好的设计师? 针对您不知道的内容进行设计。...
- linux 邮件内容换行,linux----回车换行
- java rector_Java中的Reactor是什么
- 移动端监听 video 全屏和退出全屏