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界面开发总结相关推荐

  1. Python精确指南——第二章 界面开发

    2 Python GUI 借助Python语言的优势,使用Python的界面库开发界面程序,开发周期更短.但因为Python的界面开发库底层实现一般不是Python,只是为Python封装的接口,所以 ...

  2. python界面开发工具-python图形界面开发用什么

    作为Python开发者,你迟早都会用到图形用户界面来开发应用.本文将推荐一些 Python GUI 框架,希望对你有所帮助. Python 的 UI 开发工具包 Kivy(推荐学习:Python视频教 ...

  3. 实战tkinter图形界面开发_八款常用的 Python GUI 开发框架推荐

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 乔柯 PS:如有需要Python学习资料的小伙伴可以加点击下方链接 ...

  4. Python量化交易平台开发教程系列7-顶层GUI界面开发(1)

    原创文章,转载请注明出处:用Python的交易员 前言 终于有时间来写第一篇顶层GUI界面开发相关的教程了,之前实在是事情太多,跟各位读者抱个歉. 整合底层接口的各项功能到中层引擎中后,当我们开发顶层 ...

  5. Python图形界面开发(一)——pyside入门

    目录 前言 如果用 Python 语言开发 跨平台 的图形界面的程序,主要有3种选择: PySide2.PyQt5 都是基于著名的 Qt 库. 安装 PySide2 安装PyQt5 案例一 前言 众所 ...

  6. python界面开发工具哪个好_python图形界面开发用什么

    作为Python开发者,你迟早都会用到图形用户界面来开发应用.本文将推荐一些 Python GUI 框架,希望对你有所帮助. Python 的 UI 开发工具包 Kivy Kivy是一个开源工具包能够 ...

  7. Python 图形界面开发哪个库好

    Tkinter 是官方提供的图形界面开发库,用于封装Tk GUI工具包,跨平台,但是控件少,帮助文档不健全,不便于开发复杂的图形用户界面. b站小甲鱼有Tkinter的教程 PyQt 非官方提供的图形 ...

  8. Python图形界面开发教程-课程笔记-2022-2-14

    目录 1.1 写一个弹窗 1.2了解模板代码的组成 1.3 根据模板代码写一个界面 1.4 窗口关闭事件 1.5 通过字典获取返回值values 1.6 自定义主题 1.7 自定义窗口 1.8 布局和 ...

  9. Python GUI界面开发软件综述

    参考致谢: 28款Python GUI开发框架开源软件 https://www.cnblogs.com/muziyunxuan/archive/2017/12/26/8117875.html Py之G ...

最新文章

  1. java单例模式的实现方法_Java中的五种单例模式实现方法
  2. 确保nginx安全的10个技巧
  3. Android服务一 创建启动服务
  4. Andriod: 在xml布局中使用自定义属性
  5. java 建造者实际中的用法_java中j建造者模式详解和使用方法
  6. ARM Linux.2.6.34内核移植
  7. lnmp 1.4 mysql_lnmp1.4配置https教程
  8. 这家大厂手机业务也凉了 改做手表?官方回应让人放心了...
  9. AcWing 795. 前缀和
  10. java下面哪些定义正确_Java认证考试题
  11. 大一c语言常见编程题,自己整理的C语言常见编程题
  12. 对天敏电视精灵I老版播放器的修改和分析
  13. matlab不能使用syms,matlab syms什么意思
  14. 学了C语言,能开发什么项目?
  15. tomcat 报错 Too many open files
  16. Android免打包多渠道统计如何实现?通用流行框架大全
  17. Ubuntu22.04安装gcc-5和g++-5
  18. 愤世嫉俗的程序员,总在某乎发表言论,当起了“键盘侠”
  19. 婚宴座位图html5,婚宴酒席座位安排图 20桌婚宴座位安排图
  20. Spring:Webflux响应式编程

热门文章

  1. C语言中的结构体(struct)
  2. kaptcha的使用
  3. 阿里云ossutil使用
  4. java异步日志跟同步区别_AJAX中同步和异步的区别和使用场景
  5. Web安全1.3:Arachni扫描器安装、Burpsuit激活及https证书的导入
  6. 从业人员诚信信息管理系统
  7. 如何让设计师不成为机器_想要成为最好的设计师? 针对您不知道的内容进行设计。...
  8. linux 邮件内容换行,linux----回车换行
  9. java rector_Java中的Reactor是什么
  10. 移动端监听 video 全屏和退出全屏