博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
wxpython学习笔记
阅读量:6622 次
发布时间:2019-06-25

本文共 1935 字,大约阅读时间需要 6 分钟。

一、简介

wxPython是Python编程语言的一个GUI工具箱。他使得Python程序员能够轻松的创建具有健壮、功能强大的图形用户界面的程序。它是Python语言对流行的wxWidgets跨平台GUI工具库的绑定。而wxWidgets是用C++语言写成的。和Python语言与wxWidgets GUI工具库一样,wxPython是开源软件。这意味着任何人都可以免费地使用它并且可以查看和修改它的源代码,或者贡献补丁,增加功能。wxPython是跨平台的。这意味着同一个程序可以不经修改地在多种平台上运行。现今支持的平台有:32位微软Windows操作系统、大多数Unix或类Unix系统、苹果Mac OS X。由于使用Python作为编程语言,wxPython编写简单、易于理解。

二、基本使用

基本使用的话到这个地址看已经很详细了,我没有必要重复一遍啦:

三、常用控件
1. 菜单(menu)

2. 页面布局(Sizer)

这个东东使用起来比较麻烦,参考以下页面吧:

3. Tab页面(notebook)

4. 列表控件(ListCtrl)

这个控件比较强大,是我比较喜欢使用的控件之一。在《wxPythonInAction》一书中第13章有介绍(想要该书电子版及附带源码的朋友可以问我要)

下面是list_report.py中提供的简单用法:

ContractedBlock.gifCode:ListCtrl

对于ListCtrl控件,我要补充的几个地方是:

1. 如何获取选中的项目?

最常用的方法就是获取选中的第一项:GetFirstSelected(),这个函数返回一个int,即ListCtrl中的项(Item)的ID。

还有一个方法是:GetNextSelected(itemid),获取指定的itemid之后的第一个被选中的项,同样也是返回itemid。

通过这两个方法,我们就可以遍历所有选中的项了:

ContractedBlock.gifCode : GetNextSelected

如果要获取某一行,某一列的值,则通过下面的方法:

#获取第0行,第1列的值

itemtext = self.list.GetItem(0, 1).Text

2. 如何在选定项后添加右键菜单?

在__init__函数中,添加如下的事件绑定:

self.list.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)

然后,添加OnContextMenu方法:

ContractedBlock.gifOnContextMenu

5. 选择文件对话框(FileDialog)

使用起来非常简单:

ContractedBlock.gifFileDialog

6. 选择文件夹对话框(DirDialog)

ContractedBlock.gifDirDialog

四、一些技巧
1. 设置快捷键

比如,希望按F5执行某个操作,可以在__init__函数中使用如下方法:

acceltbl = wx.AcceleratorTable([(wx.ACCEL_NORMAL, wx.WXK_F5, self.btnrun.GetId())])

self.SetAcceleratorTable(acceltbl)

还有一种很常用的情况,就是按ESC键关闭窗口。我们知道,有一种非常简单的办法就是使用SetId(wx.ID_CANCEL)方法,如:

self.btncancel = wx.Button(self.panel1, -1, 'Cancel', wx.Point(380, 280))

self.btncancel.SetId(wx.ID_CANCEL)

这样,按ESC键时,将会关闭当前Dialog,注意!这里是说Dialog,即继承自wx.Dialog的窗口对象,对于wx.Frame使用SetId似乎没有效果。

2. 使用定时器timer

在《wxPythonInAction》18章有个例子,如下:

ContractedBlock.gifwx.Timer

3. 使用多线程时你必须知道的:wx.CallAfter

在wxpython中编写多线程案例时特别需要注意,线程中通知窗口对象更新状态时,必须使用wx.CallAfter。同样是18章的例子:

ContractedBlock.gifwx.CallAfter

4. 需要在程序中启动另外一个GUI程序,而有不失去主窗口的焦点?

通常,我们调用os.popen运行其他外部程序是没有问题的。但是在wxpython中,将会让wx失去当前的焦点,即使得打开的程序成为了一个模式对话框。要解决这个问题可以使用wx自带的方法,wx.Execute。

wx.Execute('notepad')

五、学习资源

1. 官方:

2. 啄木鸟WIKI:

转载于:https://www.cnblogs.com/misha/p/4159638.html

你可能感兴趣的文章
编程中的命名设计
查看>>
【转】was mutated while being enumerated 你是不是以为你真的懂For...in... ??
查看>>
easyui form validate总是返回false原因
查看>>
在(CListView)列表视图中添加右键菜单的方法
查看>>
HDU-1542 Atlantis 求矩形面积并
查看>>
小白学数据分析----->首次购买记录分析方法
查看>>
C - urldecode函数编写
查看>>
mysql数据库中同一DB内倒表指令
查看>>
打SharePoint 2010 SP1后访问用户配置文件同步服务应用程序出错的解决办法
查看>>
推荐《HeadFirst设计模式》
查看>>
Android中的onActivityResult和setResult方法的使用
查看>>
word双栏排版,最后一页由于分节符造成最后一页是空白页,删除分节符双栏就变成了单栏...
查看>>
[原创]浅谈测试环境管理方式
查看>>
手机web不同屏幕字体大小高度自适应
查看>>
服务器端口及连接及应用程序间的关系
查看>>
Android监听HOME键的最简单的方法
查看>>
Java 数组
查看>>
inotify+rsync实现实时同步
查看>>
C#GUID
查看>>
ASP.NET 5 入门(1) - 建立和开发ASP.NET 5 项目
查看>>