21. Python脚本学习笔记二十一图形化界面

21. Python脚本学习笔记二十一图形化界面

本篇名言:“错过了晨曦,你可以欣赏暮霭;错过了春花,你可以接纳秋实;错过了太阳,你可以仰望星月;错过了昨天,你可以拥抱今天!

这么长时间我们居然一直面对枯燥乏味的文本界面,有没有一种想换种口味的想法?

尝试下图形化界面的使用了。

                  当前Python支持GUI工具包,Python有很多GUI工具包,蛤蟆也不知道到底有没有标准的GUI工具包。既然如此,就使用最成熟的跨平台GUI工具包,wxPtyhon吧。

                  支持的GUI工具包如下:

1.  环境准备

从地址

http://www.wxpython.org/

下载对应版本的软件。

下载完毕后进行安装,双击下一步下一步即可(此处蛤蟆说的是windows)

然后输如以下内容进行测试:

>>>import wx

>>>app=wx.App()

>>>app.MainLoop()

没报错即OK。此处没有东西显示出来,这个不要紧,我们接下去会让他显示出来。

 

2.  窗口和组件

窗口也成为框架,是wx.Frame类的实例。

>>>import wx

>>>app=wx.App()

>>>win=wx.Frame(None)

>>>win.Show()

True

出现如下图:

 

2.1      按钮

增加Button,实现代码如下

importwx

app=wx.App()

win=wx.Frame(None)

btn=wx.Button(win)

win.Show()

app.MainLoop()

 

2.2      标签、标题和位置

importwx

app=wx.App()

win=wx.Frame(None,title="SimpleEditor")

loadButton=wx.Button(win,label='Open')

saveButton=wx.Button(win,label='Save')

win.Show()

app.MainLoop()

 

 

此处的两个按钮堆叠在了一起,所以只能看到一个,马上弄出来。稍等片刻。

如下代码:

importwx

 

app = wx.App()

win = wx.Frame(None, title="SimpleEditor", size=(410, 335))

win.Show()

loadButton = wx.Button(win, label='Open', pos=(225, 5), size=(80, 25))

saveButton = wx.Button(win, label='Save',pos=(315, 5), size=(80, 25))

filename = wx.TextCtrl(win, pos=(5, 5),size=(210, 25))

contents = wx.TextCtrl(win, pos=(5, 35), size=(390, 260), style=wx.TE_MULTILINE | wx.HSCROLL)

app.MainLoop()

执行后如下,从界面上看已经很像一个程序了。

 

 

3.  智能布局

刚才手动布局我们对界面进行拉伸并不会自动扩展,可以使用尺寸器来解决这个问题。

尺寸器会管理组件的尺寸,只要将部件添加到尺寸器上,再加上一些布局参数,然后让尺寸器自己去管理父组件的尺寸。

代码如下:

importwx

app = wx.App()

win = wx.Frame(None, title="SimpleEditor", size=(410, 335))

bkg = wx.Panel(win)

loadButton = wx.Button(bkg, label='Open')

saveButton = wx.Button(bkg, label='Save')

filename = wx.TextCtrl(bkg)

contents = wx.TextCtrl(bkg,style=wx.TE_MULTILINE | wx.HSCROLL)

hbox = wx.BoxSizer()

hbox.Add(filename, proportion=1, flag=wx.EXPAND)

hbox.Add(loadButton, proportion=0, flag=wx.LEFT, border=5)

hbox.Add(saveButton, proportion=0, flag=wx.LEFT, border=5)

vbox = wx.BoxSizer(wx.VERTICAL)

vbox.Add(hbox, proportion=0, flag=wx.EXPAND | wx.ALL, border=5)

vbox.Add(contents, proportion=1,flag=wx.EXPAND | wx.LEFT | wx.BOTTOM |wx.RIGHT, border=5)

bkg.SetSizer(vbox)

win.Show()

app.MainLoop()

这样实现后,边框拖动后会自动进行扩展。

代码中使用了相对路径而不是绝对路径。

本次还创建了一个面板Panel。

其中wx.BoxSizer的构造函数带有一个决定是水平还是垂直的参数,默认是水平。

在水平的BoxSizer中有3个组件,不过proportion值不一样,三个组件的proportion的值分别是1,0,0。表示第一个组件获得水平扩展的全部额外空间,其他2个组件不变。

其中的Add函数中的flag参数表示组件是否会扩展到所分配的空间中。

 

 

4.  事件处理

用户执行的动作叫做事件。

需要将按钮这个事情,我们发送一个消息出去告诉程序我们进行了按钮操作。

很简单,如下即可实现。

loadButton.Bind(wx.EVT_BUTTON,load)

5.  完成事件处理

实现两个函数关于load和save的。

def load(event):

    file = open(filename.GetValue())

    contents.SetValue(file.read())

    file.close()

 

def save(event):

    file = open(filename.GetValue(), 'w')

    file.write(contents.GetValue())

    file.close()

 

最后全部实现如下:

importwx

def load(event):

   file = open(filename.GetValue())

   contents.SetValue(file.read())

   file.close()

 

def save(event):

   file = open(filename.GetValue(), 'w')

   file.write(contents.GetValue())

   file.close()

 

app = wx.App()

win = wx.Frame(None, title="SimpleEditor", size=(410, 335))

 

bkg = wx.Panel(win)

 

loadButton = wx.Button(bkg, label='Open')

loadButton.Bind(wx.EVT_BUTTON,load)

 

saveButton = wx.Button(bkg, label='Save')

saveButton.Bind(wx.EVT_BUTTON,save)

 

filename = wx.TextCtrl(bkg)

contents = wx.TextCtrl(bkg, style=wx.TE_MULTILINE| wx.HSCROLL)

 

hbox = wx.BoxSizer()

hbox.Add(filename, proportion=1, flag=wx.EXPAND)

hbox.Add(loadButton, proportion=0, flag=wx.LEFT, border=5)

hbox.Add(saveButton,proportion=0, flag=wx.LEFT, border=5)

 

vbox = wx.BoxSizer(wx.VERTICAL)

vbox.Add(hbox, proportion=0, flag=wx.EXPAND | wx.ALL, border=5)

vbox.Add(contents, proportion=1,

         flag=wx.EXPAND | wx.LEFT | wx.BOTTOM |wx.RIGHT, border=5)

 

bkg.SetSizer(vbox)

win.Show()

 

app.MainLoop()

在Windows中,可以使用.pyw作为文件名的结尾来保存GUI程序。

                  在开头所说,除了wxPython还有Tkinter,Jython,Swing等GUI工具的。

                  不过大多数GUI工具包的基础都一样的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值