建一个基本的wxpython程序结构你必须做完5个步骤:
1 引入必须的wxpython包
2 继承wxpython应用程序类
3 定义一个应用程序初始化方法
4 创建一个应用程序类的实例
5进入应用程序的事件主循环。
第一件事情就是导入wx库
import wx
导入了这个wx库,你就可以指向wxpython的类,函数,常量。。。
class App(wx.App):
上例为建立一个App类,继承自wx.App类。
有一件事很重要:你必须导入wx库在你导入任何其他的wxpython库之前。
给出一个定义wx.App子类的例子
class MyApp(wx.App):
def OnInit(self):
frame = wx.Frame(parent=None, id=-1, title="Bare")
frame.Show()
return True
wx.Frame构造方法接收数个参数。只有第一个是必须的,其余的都有默认值。
调用Show(true)方法使得窗口显示,如果参数为false,则窗口消失,但是窗口还是存在的。
frame.Show(False) # Make the frame invisible.
frame.Show(True) # True is the default parameter value.
frame.Hide() # Equivalent to frame.Show(False).
Define an application initialization
class App(wx.App):
def __init__(self):
# Call the base class constructor.
wx.App.__init__(self)
# Do something here...
自定义了一个app类,不要忘记了调用父类的init。如果你忘记做这步,wxpython将不会初始化
并且你的OnInit方法也不会被调用。悲剧啊!
Create an application class instance and enter its main event loop
app = App()
app.MainLoop()
就是这样,应用程序的主时间循环接手了。当所有窗体被关闭,app.MainLoop()方法将返回并且程序将退出。
Extending the bare-minimum wxPython program
这个初级的程序应该给你一个很舒服的开始,但但是有些事情太小了以至于没有任何实际用途除了让我们研究讨论。接下来扩展这个程序。
#!/usr/bin/env python
"""Spare.py is a starting point for a wxPython program."""
import wx
class Frame(wx.Frame):
pass
class App(wx.App):
def OnInit(self):
self.frame = Frame(parent=None, title='Spare')
self.frame.Show()
self.SetTopWindow(self.frame)
return True
if __name__ == '__main__':
app = App()
app.MainLoop()
在这个程序中,我改变了创建frame对象的方法:定义了一个wx.Frame类的子类。你很可能想要将他加入自己的module并且import进你的程序中。
在OnInit()方法中调用了SetTopWindow()方法,这个方法的作用是指定整个wxpyton程序的主窗体。因为你的程序有可能有很多个窗体。
Creating the final hello.py program
程序不全贴了,直接上不同的地方
def __init__(self, image, parent=None, id=-1,
pos=wx.DefaultPosition,
title='Hello, wxPython!'):
"""Create a Frame instance and display image."""
temp = image.ConvertToBitmap()
size = temp.GetWidth(), temp.GetHeight()
wx.Frame.__init__(self, parent, id, title, pos, size)
self.bmp = wx.StaticBitmap(parent=self, bitmap=temp)
image = wx.Image('wxPython.jpg', wx.BITMAP_TYPE_JPEG)
self.frame = Frame(image)
我们要显示一个图像在wx.StaticBitmap控件中,就必须要一个bitmap。所以我们转换了图像到位图。同时使用size配对可以使得框架的尺寸与位图尺寸相符。
第一章理论上到此结束了。但是作者要吹一下wxpython。有兴趣慢慢看。