图形用户界面主要是方便用户操作,Python开源的GUI类库还是蛮多的,这里介绍一款在Python语言中的一套优秀的GUI图形库,而且是跨平台的,现今支持的平台有:32/64位微软Windows操作系统、大多数Unix或类Unix系统、苹果Mac OS X。
安装很简单,最好指定国内镜像地址,下载速度非常快,这也是我建议任何使用pip下载的时候,都最好指定镜像站点,所以不建议 pip install -U wxPython 这样直接安装,因为国内访问国外站点速度比较慢,尤其下载的东西比较大的时候。
pip install -U wxPython -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
其中这里的-U就是升级的意思 --upgrade,如果已有安装那就升级到最新版
第一个GUI
安装好了之后,我们来创建一个最简单的用户界面,四条代码即可搞定,代码如下:
# 导入wxPython包
import wx
# 创建一个实例对象
app = wx.App()
# 创建窗口,设置标题
frm = wx.Frame(None, title="寅恪光潜")
# 显示
frm.Show()
# 启动主循环
app.MainLoop()
是不是很简单,导入wx包,然后创建窗口,显示出来即可。
其中的主循环的意思就是一直循环,接收用户的输入,比如点击了关闭按钮,界面就退出等
GUI填充内容
上面的骨架搭建好了,我们让它变得有血有肉,成为血肉之躯哈哈。
现在我们在这个界面里面增加一些内容,比如增加菜单栏、状态栏显示以及设置字体大小,颜色等等以及与界面有交互操作
import wx
class MyFrame(wx.Frame):
def __init__(self, *args, **kw):
super(MyFrame, self).__init__(*args, **kw)
# 在窗口里面创建控制面板
pnl = wx.Panel(self)
# 面板里设置文本并设置字体相关
st = wx.StaticText(pnl, label="你好,寅恪光潜!")
font = st.GetFont()
font.PointSize += 10
font = font.Bold()
st.SetFont(font)
# BoxSizer来管理小部件的布局
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(st, wx.SizerFlags().Border(wx.TOP | wx.LEFT, 25))
pnl.SetSizer(sizer)
# 调用下面创建菜单栏的方法
self.makeMenuBar()
self.CreateStatusBar()
self.SetStatusText("这里是状态栏信息")
def makeMenuBar(self):
# 菜单项
fileMenu = wx.Menu()
helloItem = fileMenu.Append(-1, "&点我\tCtrl-H", "状态栏的帮助信息")
fileMenu.AppendSeparator()
# 库存ID,可以不指定标签,这里是Quit退出
exitItem = fileMenu.Append(wx.ID_EXIT)
helpMenu = wx.Menu()
aboutItem = helpMenu.Append(wx.ID_ABOUT)
# 菜单栏
menuBar = wx.MenuBar()
menuBar.Append(fileMenu, "&文件")
menuBar.Append(helpMenu, "&帮助")
# 框架显示菜单栏
self.SetMenuBar(menuBar)
# 菜单绑定事件
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("再点我,就把你吃掉")
def OnAbout(self, event):
wx.MessageBox("这是我们创建的第一个真正意义上的GUI程序","帮助",wx.OK | wx.ICON_INFORMATION)
if __name__ == '__main__':
app = wx.App()
frm = MyFrame(None, title='这里是标题')
frm.Show()
app.MainLoop()
这里主要是针对框架在里面增加面板,然后往里面添加东西,并创建了菜单栏,里面有菜单项,然后通过self.Bind()方法去绑定菜单项与事件,这样点击菜单项就出现相对应的动作来处理。
不过从这里我们可以看到,为了在里面增加一些东西,需要写很多代码之外,也不直观,最好是有一种其他语言一样可以直接拖拽与编辑的界面,接下来的一篇就是为此准备的。