WXpython入门基础

一、简介                                                                                                                           转自

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

二、基本使用

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

http://wiki.wxpython.org/Getting%20Started

三、常用控件

1. 菜单(menu)

http://wiki.wxpython.org/Getting%20Started#head-33e6dc36df2a89db146142e9a97b6e36b956875f

2. 页面布局(Sizer)

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

http://wiki.wxpython.org/Getting%20Started#head-7455553d71be4fad208480dffd53b7c68da1a982 

wxPython frame的布局详细解释(一) 

wxPython frame的布局详细解释(二) 

3. Tab页面(notebook)

http://wiki.wxpython.org/Getting%20Started#head-b20d2fc488722cdb3f6193150293d1e118734db8 

4. 列表控件(ListCtrl)

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

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

WXpython入门基础 - 丅壹站-火星 - 夏Ⅰ战 Code:ListCtrl
import wx
import sys, glob, random
import data

class DemoFrame(wx.Frame):
    
def __init__(self):
        wx.Frame.
__init__(self, None, -1,
                          
"wx.ListCtrl in wx.LC_REPORT mode",
                          size
=(600,400))

        il 
= wx.ImageList(16,16, True)
        
for name in glob.glob("smicon??.png"):
            bmp 
= wx.Bitmap(name, wx.BITMAP_TYPE_PNG)
            il_max 
= il.Add(bmp)
        self.list 
= wx.ListCtrl(self, -1, style=wx.LC_REPORT)
        self.list.AssignImageList(il, wx.IMAGE_LIST_SMALL)

        
# Add some columns
        for col, text in enumerate(data.columns):
            self.list.InsertColumn(col, text)

        
# add the rows
        for item in data.rows:
            index 
= self.list.InsertStringItem(sys.maxint, item[0])
            
for col, text in enumerate(item[1:]):
                self.list.SetStringItem(index, col
+1, text)

            
# give each item a random image
            img = random.randint(0, il_max)
            self.list.SetItemImage(index, img, img)
                
        
# set the width of the columns in various ways
        self.list.SetColumnWidth(0, 120)
        self.list.SetColumnWidth(
1, wx.LIST_AUTOSIZE)
        self.list.SetColumnWidth(
2, wx.LIST_AUTOSIZE)
        self.list.SetColumnWidth(
3, wx.LIST_AUTOSIZE_USEHEADER)


app 
= wx.PySimpleApp()
frame 
= DemoFrame()
frame.Show()
app.MainLoop()

 

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

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

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

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

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

WXpython入门基础 - 丅壹站-火星 - 夏Ⅰ战 Code : GetNextSelected

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

# 获取第0行,第1列的值
itemtext  =  self.list.GetItem(0,  1 ).Text

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

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

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

然后,添加OnContextMenu方法:

WXpython入门基础 - 丅壹站-火星 - 夏Ⅰ战 OnContextMenu

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

使用起来非常简单:

WXpython入门基础 - 丅壹站-火星 - 夏Ⅰ战 FileDialog

6. 选择文件夹对话框(DirDialog)
WXpython入门基础 - 丅壹站-火星 - 夏Ⅰ战 DirDialog

 

四、一些技巧 

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章有个例子,如下:

WXpython入门基础 - 丅壹站-火星 - 夏Ⅰ战 wx.Timer
3. 使用多线程时你必须知道的:wx.CallAfter

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

WXpython入门基础 - 丅壹站-火星 - 夏Ⅰ战 wx.CallAfter
4. 需要在程序中启动另外一个GUI程序,而有不失去主窗口的焦点?

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

wx.Execute( ' notepad ' )

 

五、学习资源

1. 官方:http://wiki.wxpython.org/FrontPage

2. 啄木鸟WIKI:http://wiki.woodpecker.org.cn/moin/WxPythonInAction

作者:CoderZhCoderZh的技术博客 - 博客园
微博:http://t.sina.com.cn/coderzh 
出处:http://coderzh.cnblogs.com
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值