博主以前学习过python官方御用的tkinter,不过时间挺久了。今天来尝试一点新东西,wxpython。
什么是wxPython?
wxPython是一个用于Python编程语言的跨平台GUI工具包。它允许Python程序员简单轻松地创建具有强大,高功能的图形用户界面的程序。它被实现为一组Python扩展模块,它们包含流行的wxWidgets跨平台库的GUI组件,该 库是用C ++编写的。
像Python和wxWidgets一样,wxPython是开源的,这意味着任何人都可以免费使用它,并且任何人都可以查看和修改源代码。任何人都可以为项目提供修复或增强功能。
wxPython是一个跨平台的工具包。由于编程语言是Python,因此wxPython程序简单, 易于编写且易于理解。
实践hello world
import wx # 导入wx包
app = wx.App() # 创建一个应用程序对象
frm = wx.Frame(None, title="Hello World") # 创建一个界面
frm.Show() # 显示它
app.MainLoop() # 启动一个时间循环
运行结果:
进阶
import wx
class HelloFrame(wx.Frame): # 一个说Hello World的框架
def __init__(self, *args, **kw): # 确保调用父类的__init__
super(HelloFrame, self).__init__(*args, **kw)
pnl = wx.Panel(self) # 在框架中创建一个面板
st = wx.StaticText(pnl, label="Hello World!") # 放一些加粗字体在面板上
font = st.GetFont()
font.PointSize += 10
font = font.Bold()
st.SetFont(font)
sizer = wx.BoxSizer(wx.VERTICAL) # 并创建一个sizer来管理子窗口小部件的布局
sizer.Add(st, wx.SizerFlags().Border(wx.TOP|wx.LEFT, 25))
pnl.SetSizer(sizer)
self.makeMenuBar() # 创建一个菜单栏
self.CreateStatusBar()
self.SetStatusText("Welcome to wxPython!")
def makeMenuBar(self):
"""
菜单栏由菜单组成,菜单由菜单项组成。
此方法构建一组菜单并绑定要调用的处理程序
选择菜单项时。
"""
fileMenu = wx.Menu() # 使用Hello和Exit项创建一个文件菜单
# “\ t...”语法定义了一个也触发的加速键
# 同一事件
helloItem = fileMenu.Append(-1, "&Hello...\tCtrl-H", "Help string shown in status bar for this menu item")
fileMenu.AppendSeparator()
# 使用库存ID时,我们不需要指定菜单项
# 标签
exitItem = fileMenu.Append(wx.ID_EXIT)
# 现在是关于项目的帮助菜单
helpMenu = wx.Menu()
aboutItem = helpMenu.Append(wx.ID_ABOUT)
# 制作菜单栏并为其添加两个菜单。'&'定义
# 下一个字母是菜单项的“助记符”。在
# 支持它的平台那些字母加下划线并且可以
# 从键盘触发。
menuBar = wx.MenuBar()
menuBar.Append(fileMenu, "&File")
menuBar.Append(helpMenu, "&Help")
# Give the menu bar to the frame
self.SetMenuBar(menuBar)
# 最后,将处理函数与EVT_MENU事件关联起来
# 每个菜单项。这意味着当该菜单项是
# activated然后将调用相关的处理函数。
self.Bind(wx.EVT_MENU, self.OnHello, helloItem)
self.Bind(wx.EVT_MENU, self.OnExit, exitItem)
self.Bind(wx.EVT_MENU, self.OnAbout, aboutItem)
def OnExit(self, event):
"""关闭框架"""
self.Close(True)
def OnHello(self, event):
wx.MessageBox("Hello again from wxPython")
def OnAbout(self, event):
wx.MessageBox("This is a wxPython Hello World sample",
"About Hello World 2",
wx.OK|wx.ICON_INFORMATION)
if __name__ == '__main__':
# 运行此模块(未导入)然后创建应用程序,
# frame,显示它,然后启动事件循环。
app = wx.App()
frm = HelloFrame(None, title='Hello World 2')
frm.Show()
app.MainLoop()
运行结果: