python学习基本图形绘制12章节_((Python基础教程))学习笔记 | 第12章 | 图形用户界面...

Python支持的工具包很多,但没有一个被认为标准的工具包,用户选择的自由度大些.本章主要介绍最成熟的跨平台工具包wxPython.官方文档: https://wxpython.org/

------

丰富的平台:

Tkinter实际上类似于标准,因为它被用于大多数正式的Python GUI程序,而且它是Windows二进制发布版的一部分,喎�"/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+tavKx9TaVU5JWMnP0qrX1Ly6seDS67Cy17ChozwvcD4KPHA+we3Su7j21L3AtNS9yty7ttOttcS5pL7fysd3eFB5dGhvbqGj1eLKx7j2s8nK7Lb4x9LM2NDUt+G4u7XEsPyjrNKyysdQeXRob27Wrri4o6xHdWlkbyB2YW4gUm9zc3VttcTX7rCuPC9wPgo8cD4tLS0tLS08YnI+CjwvcD4KPHA+PHU+z8LU2LCy17B3eFB5dGhvbjwvdT48L3A+CjxwPmh0dHA6Ly93eHB5dGhvbi5vcmcvZG93bmxvYWQucGhwIDxicj4KPC9wPgo8cD5OT1RFOjwvcD4KPHA+MS4g16LS4tGh1PG4+tfUvLpQQ7XEtv69+NbGsOaxvrbU06a1xFB5dGhvbrDmsb48L3A+CjxwPjIuIM/C1Nh3eFB5dGhvbrrzo6zHv8HSvajS6c/C1NjR3cq+sOaxvihkZW1vKSzKvsD9s8zQ8rfHs6PP6s+4PC9wPgo8cD4tLS0tLS08YnI+CjwvcD4KPHA+PHU+tLS9qMq+wP1HVUmzzNDyPC91PjwvcD4KPHA+1+688rWltcTKvsD9s8zQ8sjnz8I6PC9wPgo8cD4+Pj4gaW1wb3J0IHd4ICAgICAgI7W8yOvEo7/pICAgICAgIDxicj4KPj4+IGFwcCA9IHd4LkFwcCgpICOz9cq8u6+7+bG+tcTS/dPDs8zQ8sDgPGJyPgo+Pj4gYXBwLk1haW5Mb29wKCkgI3d41tC1xLD8t723qLTz0LS/qs23o6zT61B5dGhvbs+wud/P4Le0PGJyPgo8L3A+CjxwPrSwv9q6zdfpvP48L3A+CjxwPrSwv9rSsrPGzqq/8rzcLMv8ysd3eC5GcmFtZcDgtcTKtcD9oaN3eL/yvNzW0LXEsr+8/ra8ysfTycv8w8e1xLi4sr+8/tf3zqq5udTsuq/K/bXEtdrSu7j2ss7K/bS0vai1xKGjyOe5+9X91Nq0tL2otcTSu7j2taW2wLXEtLC/2qOsvs2yu9Do0qq/vMLHuLiyv7z+o6zKudPDTm9uZby0v8mho7b4x9LU2rX308NhcHAuTWFpbkxvb3DHsNDo0qq199PDtLC/2rXEPC9wPgo8cD5TaG93t723qC0tt/HU8sv8u+HSu9ax0v6y2C48L3A+CjxwPjwvcD4KCjxlbT6zzNDyx+W1pTE6IDwvZW0+CjxwPjwvcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:java;">import wx

app = wx.App()

win = wx.Frame(None)

win.Show()

app.MainLoop()

程序清单2: 在框架上添加按钮

#在框架上添加按钮也很简单,只要使用win作为父参数实例化wx.Button即可.

import wx

app = wx.App()

win = wx.Frame(None)

btn = wx.Button(win)

win.Show()

app.MainLoop()

程序清单3: 使用关键字参数增加标签和标题

import wx

app = wx.App()

win = wx.Frame(None,title="Simple Editor")

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

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

win.Show()

app.MainLoop()

看样子丢了一个按钮,实际上隐藏了,如果要显示出来,里面的post,size就得用上.

程序清单4: 设置按钮位置

import wx

app = wx.App()

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

win.Show()

#位置坐标,x与y的值

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

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

#文本框(wx.TextCtrl的对象),默认可编辑,无滚动条

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)

#style参数,可以使用按位或OR联合wx模块中具有特殊名字的风格来指定

#wx.TE_MULTILINE 垂直滚动条

#wx.HSCROLL 水平滚动条

app.MainLoop()

------

更智能的布局

在wx内进行布局的最简单方法是使用尺寸器(sizer),最容易使用的工具是wx.BoxSizer。尺寸器会管理组件的尺寸。只要将部件添加到尺寸器上,再加上一些布局参数,然后让尺寸器自己去管理父组件的尺寸。在上面的例子中,需要增加背景组件(wx.Panel),创建一些嵌套的wx.BoxSizer,然后使用面板的SetSizer方法设定它的尺寸器。

程序清单5: 使用尺寸器

#代码的运行效果和上例相同,只不过用相对坐标而不是绝对坐标

import wx

app = wx.App()

win = wx.Frame(None,title="Simple Editor",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)

#wx.BoxSizer两个参数wx.HORIZONTAL(垂直),wx.VERTICAL(水平,默认)

#Add方法有几个参数,proportion参数根据在窗口改变大小时所分配空间设置比例

#例如:水平的BoxSizer中,filename组件在改变大小时获取全部的额外空间

#如果这3个部件都把proprotion设置为1,那么都会获取相等的空间

#可以讲proportion设定为任何数

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)

#flag参数类似于style参数,可以使用|或者OR连接构造符号常量对其进行构造

#wx.EXPAND标记确保组件会扩展到所有分配的空间中。而wx.LEFT,wx.RIGHT,wx.TOP,

#wx.BOTTOM和wx.ALL标记决定边框参数应用于哪个边,用于设置边缘宽度

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()布局已经好了,但点击按钮后什么反应也没有

------

完成了的程序

剩下的工作,需要两个处理函数:load和save。当事件处理函数被调用时,事件对象event是唯一的参数

#文件名使用filename对象的GetValue方法获取

#为了将文本引入文本区,只要使用contents.SetValue即可.

def load(event):

file = open(filename.GetValue())

contents.SetValue(file.read())

file.close()

#save函数几乎和load一样,除了它有个'w'属性以及write方法.

#GetValue用于从文本区获得信息

def save(event):

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

file.write(contents.GetValue())

file.close()

程序清单6: 最终的程序

import wx

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="Simple Editor",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()

------

其他工具包

可以看下面最简单例子,只有一个窗口,带有Hello标签的按钮,点击按钮时,它会打印文本"Hello,World!"

代码如下:

import wx

def hello(event):

print "Hello,World!"

app = wx.App()

win = wx.Frame(None,title="Hello,wxPython!",size=(200,100))

button = wx.Button(win,label='Hello')

button.Bind(wx.EVT_BUTTON,hello)

win.Show()

app.MainLoop()------

使用Tkinter

Python自带的,下面是使用Tkinter实现的GUI程序

from Tkinter import *

def hello():

print ('Hello,World!')

win = Tk()

win.title('Hello,Tkinter!')

win.geometry('200x100')

btn = Button(win,text='Hello',command=hello)

btn.pack(expand=YES,fill=BOTH)

mainloop()------

其他还可以使用Jython和Swing

Jython: Python的Java实现,类似于wxPython和Tkinter这样的包就不能用了。唯一可用的GUI工具包是Java标准库包

中的AWT和Swing。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值