12. 图形界面
12.1 丰富的平台
工具包描述网站
Tkinter使用Tk平台。很容易得到,半标准https://wiki.python.org/moin/TkInterwxpython基于wxWindows。跨平台http://wxpython.orgPythonWin只能在Windows上使用,使用了本机的Windows GUI功能https://wiki.python.org/moin/PythonWinJavaSwing只能用于Jython。使用本机上的Java GUIhttp://docs.oracle.com/javase/tutorial/uiswing/PyGTK使用GTK平台,在Linux上很流行http://www.pygtk.orgPyQt使用Qt平台,跨平台http://wiki.python.org/moin/PyQt
12.2 下载和安装wxPython
注意:要下载对应Python版本的wxPython。
下载页面
12.3 创建示例GUI应用程序
12.3.1 开始
import wx
app = wx
.App()
app
.MainLoop()
12.3.2 窗口和组件
窗口(Window)也成为框架(Frame),它只是wx.Frame类的实例。wx框架中的部件都是有他们父部件作为构造函数的第一个参数创建的。如果没有父部件,使用None即可。
import wx
app = wx
.App()
win = wx
.Frame(None)
# 增加按钮
btn = wx
.Button(win)
win
.show()
app
.MainLoop()
12.3.3 标签、标题和位置
win = wx.Frame(None, title=
"Simple Editor",
size=(
410,
335))
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)
12.3.4 更智能的布局
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)
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()
12.3.5 事件处理
# load函数被绑定
loadButton
.Bind(wx
.EVT_BUTTON, load)
12.3.6 完成了的程序
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()
12.4 其他GUI包
wxPython版本的示例
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()
12.4.1 Tkinter
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()
12.4.2 使用Jython和Swing
from javax.swing
import *
import sys
def hello(event): print 'Hello, world! '
btn = JButton(
'Hello')
btn.actionPerformed = hello
win = JFrame(
'Hello, Swing!')
win.contentPane.add(btn)
def closeHandler(event): sys.exit()
win.windowClosing = closeHandler
btn.size = win.size =
200,
100
win.show()
转载请注明原文地址: https://ju.6miu.com/read-34220.html