wxPython in Action(一)

本文介绍了wxPython的基本使用方法,包括创建简单的GUI程序的过程。通过逐步构建一个显示鼠标位置的应用,展示了如何构建窗口、处理事件等核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
wxPython in Action

——译文
Part1 wxPython入门



欢迎来到wxPython

下面是一个例子,它创建了一个有一个文本框的窗口用来显示鼠标的位置。

#!/bin/env python 
import wx 
class MyFrame(wx.Frame): 

    def __init__(self): 
        wx.Frame.__init__(self, None, -1, "My Frame", size=(300, 300)) 
        panel = wx.Panel(self, -1) 
        panel.Bind(wx.EVT_MOTION,  self.OnMove) 
        wx.StaticText(panel, -1, "Pos:", pos=(10, 12)) 
        self.posCtrl = wx.TextCtrl(panel, -1, "", pos=(40, 10)) 
    
    def OnMove(self, event): 
        pos = event.GetPosition() 
        self.posCtrl.SetValue("%s, %s" % (pos.x, pos.y)) 

if __name__ == '__main__': 
    app = wx.PySimpleApp() 
    frame = MyFrame() 
    frame.Show(True) 
    app.MainLoop() 


图示如下:


漂亮的界面是一个GUI程序必不可少的一部分,wxPython可以做到这一点,加之Python强大的功能和简洁的语法,使用得它在Python的gui中成为一种主流。

1.1 开始wxPython 

首先我们创建一个显示一个图像的文件。这将分三步:

    1、首先创建一个空的最小的可以工作的wxPthon程序
    2、组织和细化
    3、显示wxPython的logo
图示如下:



1.2 创建最小的空的wxPython程序

我们创建一个名为bare.py的程序并键入以下代码:

import wx     #1

class App(wx.App):    #2
 
    def OnInit(self):     #3
        frame = wx.Frame(parent=None, title='Bare') 
        frame.Show() 
        return True 

app = App()     #4
app.MainLoop()     #5

上面的代码运行的结果如下:


上面的代码的任何一行都不能少,否则将不能工作。这个基本的wxPython程序说明了开发任一wxPython程序所必须的五个基本步骤:
    1、导入必须的wxPython包
    2、子类化wxPython应用程序类
    3、定义一个应用程序的初始化方法
    4、创建一个应用程序类的实例
    5、进入这个应用程序的主事件循环

下面让我们看看这个最小的空的程序是如何一步一步实现的。

1.2.1 导入wxPython
你需要做的第一件事就是导入这个主要的wxPython包,这个包名为wx:

import wx

一旦这个包被导入,你就可以引用wxPython的类、函数和常量(它们以wx为前缀),如下所示:

class App(wx.App):

注意:老的引入方式仍然被支持,你可能会遇到用这种老的引入方式的代码。因此我们将会简短地说明这种老的方式及为什么要改变它。老的包的名字是wxPython,它包含了一个内在的名为wx模块。那时,通常有两种导入必要的代码的方法,一种就是从wxPython包中导入wx模块:from wxPython import wx;另一种就是直接从wx模块中导入所有的东西:from wxPython.wx import *。这两种方法都有严重的缺点。这第二种方法Python中是不建议使用的,这因为可能导致名字空间冲突,而老的wx模块通过在其属性前加一个wx前缀避免了这个问题。尽管使用这个安全防范,但是import*仍然有可能导致问题,但是许多wxPython程序员喜欢这种类型,并且你将在老的代码中经常看到这种用法。这种风格的坏处是类名以小写字母开头,而大多数wxPython方法以大写字母开头,这和通常的Python编写程序的习惯相反。

然而如果你试图避免由于使用import*导致的名字空间膨胀,而使用from wxPython import wx。那么你就不得不为每个类、函数、常数名键入两次wx,一次是作为包的前缀,另一次是作为通常的前缀,例如wx.wxWindow。

对于导入顺序需要注意的是:你从wxPython导入其它东西之前必须先导入wx。通常情况下,Python中的模块导入顺序无关。但是wxPython中的不同,它是一个复杂的模块。当你第一次导入wx模块时,wxPython要对别的wxPython模块执行一些初始化工作。例如wxPython中的一些子包,如xrc模块,它在wx模块导入之前不能够正确的工作,我们必须按下面顺序导入:

import wx            
from wx import xrc

以上的导入顺序只针对wxPython的模块,Python的模块导入顺序没关系。例如:

import sys 
import wx 
import os 
from wx import xrc 
import urllib

 

原文地址:http://www.pythontik.com/blog/article.asp?id=177

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值