Post

wxPython开发总结及踩过的坑

wxPython介绍

wxPython是针对Python编程语言的一套跨平台的图形用户界面工具集。它允许Python开发者使用一些健壮的、功能强大的图形用户接口来简单并且容易地开发GUI程序。它实现了一套封装了闻名的跨平台的使用C++编写的GUI组件——wxWidgets的Python扩展模块。 像Python和wxWidgets一样,wxPython是开源的,这就意味着任何人可以免费地使用它并且查看和修改它的源代码,同样也可以贡献代码来修复bug或者完善该组件。

以上引用自wxPython官方网站的介绍https://wxpython.org/pages/overview/

界面构建

使用wxPython组件构建GUI的原因便是可以方便地使用wxFormBuilder构建界面,简单地拖控件即可,所见即所得,很快就能拼出想要的界面效果。

常用控件介绍

  • 静态文本:StaticText StaticText用来显示普通的文字,主要方法有
    1
    2
    3
    
     SetLabel(self, label)
      设置文字
      参数:	label (string)
    
  • 下拉菜单:Choice Choice用来让用户选择指定的条目,不可自定义编辑,主要方法有:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
     GetSelection(self)
      获取所选项的下标,如果没有选择返回NOT_FOUND
      返回类型: int
      返回值: 当前选项的下标(从0开始)
     GetString(self, n)
      返回下标对应的文本
      参数:	n (int) – 从0开始
      返回类型:	string
      返回值: 下标对应的文本,如果下标无效,返回空字符串1
    
  • 按钮:Button 按钮很常用,点击之后响应点击事件。可以在wxFormBuilder设置好按钮绑定的事件方法,然后在子类中实现该方法即可。

  • 文本框:TextCtrl 文本框用来显示数量较多的文本,常用方法:
    1
    2
    3
    4
    5
    
     AppendText(self, text)
      添加文字到文本框的末尾
      参数:	text (string) – 要添加的文字
     Clear(self)
      清空文本框
    

踩过的坑

  • 在wxPython中执行高耗时任务时,会导致界面暂时卡死 解决方法:创建一个新线程来执行高耗时任务,并采用回调的方式在任务线程中修改控件数据
    1
    2
    3
    4
    5
    6
    7
    
    订阅消息(主线程):
    pub.subscribe(self.update_text_status, "update_text_status")
    发送回调(任务线程):
    wx.CallAfter(pub.sendMessage, 'update_text_status', msg='正在发布')
    定义回调方法(主线程):
    def update_text_status(self, msg):
          self.text_status.SetLabel(msg)
    
This post is licensed under CC BY 4.0 by the author.