在学习用wxPython开发GUI应用时,发现了一本英文的好书《wxPython 2.8 Application Development Cookbook 》。对比与另外一本已经翻译成中文的《wxPython in Action》,感觉Cookbook能更好的建立一个GUI程序的开发体系,这比单单介绍各种控件的应用要更能使开发者避免只见树木不见森林的问题。行文的结构上基本采用三个步骤:How to do it? How it works? There's more,循序渐进,倍感清爽。由于发现网络上还没有起相关的译文,就斗胆以学习笔记的形式来简单翻译下此书,主要目的还是提高运用wxPython的能力。也就逐步翻译,逐步更新了,受限于能力,计划年底前能完工吧。
Chatper1 Getting Started with wxPython
现如今有许多不同的跨平台Python框架来开发桌面应用。wxPython是是一系列用C++开发的跨平台框架的wxWigets库。与其它跨平台框架不同的地方在于,wxPython利用平台原生的UI工具包来生成与呈现UI组件。源于利用相同的控件和主题,一个wxPython应用与平台上其它应用相比,拥有同样的外观和体验。利用wxPython开发应用为您提供了巨大的灵活度,它可以在Windows, Macitosh OS X, Linux 和其它Unix类似的环境下运行。应用可迅速开发,并甚少或无须改动的基础上迁移到其它平台。
import wx
class MyApp(wx.App):
def OnInit(self):
wx.MessageBox("Hello wxPython", "wxApp")
return True
if __name__ == "__main__":
app = MyApp(False)
app.MainLoop()</span>
运行上面的脚本会在屏幕上产生一个弹出的对话框。点击OK可以关闭并退出这个应用
- redirect: 重定向去stdout
- filename:可以重定向去制定的文件
- useBestVisual: 指明应用是否要采用最佳视觉体验,在大多数系统上这个设置没有效果
- clearSigInt: Should SIGINT be cleared? Setting this to True will allow the application to be terminated by pressing Ctrl + C, like most other applications. (没发现什么区别)
import wx
class MyApp(wx.App):
def OnInit(self):
self.frame = MyFrame(None, title = "The Main Frame")
self.SetTopWindow(self.frame)
self.frame.Show()
return True
class MyFrame(wx.Frame):
def __init__(self, parent, id = wx.ID_ANY, title ="",
pos = wx.DefaultPosition, size = wx.DefaultSize,
style = wx.DEFAULT_FRAME_STYLE,
name = "MyFrame"):
super(MyFrame, self).__init__(parent, id, title, pos, size, style, name)
self.panel = wx.Panel(self)
if __name__ == "__main__":
app = MyApp(False)
app.MainLoop()
- wx.MINIMIZE_BOX :显示一个最小化按钮
- wx.MAXIMIZE_BOX:显示一个最大化按钮
- wx.CLOSE_BOX:显示一个关闭按钮
- wx.RESIZE_BORDER:允许Frame可以通过拖拽改变大小
- wx.CAPTION:显示标题
- wx.SYSTEM_MENU:当点击frame的图标是显示系统标题
- wx.CLIP_CHILDREN:Eliminates flicker caused by the background being repainted (Windows only)
- wx.DEFAULT_FRAME_STYLE:上面7个标示的综合
import wx
class MyApp(wx.App):
def OnInit(self):
self.frame = MyFrame(None, title = "The Main Frame")
self.SetTopWindow(self.frame)
self.frame.Show()
return True
class MyFrame(wx.Frame):
def __init__(self, parent, id = wx.ID_ANY, title ="",
pos = wx.DefaultPosition, size = wx.DefaultSize,
style = wx.DEFAULT_FRAME_STYLE,
name = "MyFrame"):
super(MyFrame, self).__init__(parent, id, title, pos, size, style, name)
self.panel = wx.Panel(self)
self.panel.SetBackgroundColour(wx.BLACK)
self.button = wx.Button(self.panel,
label = "Push Me",
pos = (50, 50))
if __name__ == "__main__":
app = MyApp(False)
app.MainLoop()
- 顶级窗口(Top-Level Windows):Frames, Dialogs
- 通用容器(General Containers):Panels, Notebooks
- 控件(Controls):Buttons, CheckBoxes, ComboBoxes