天天看點

12-圖形使用者界面

圖形使用者界面

  1. GUI就是包含按鈕、文本框等控件的視窗。
  2. Tkinter是事實上的Python标準GUI工具包,包含在Python标準安裝中。

建立 GUI 示例應用程式

from tkinter import *
top = Tk()
btn = Button()
# 使用管理器pack——在最簡單的情況下隻需調用方法pack即可。
# 控件包含各種屬性,我們可以使用它們來修改控件的外觀和行為。
btn.pack()
# btn['text'] = '點選!'
def clicked():
    print('我是按鈕!')
# btn['command'] = clicked
# 可以不分别給屬性指派,而使用方法config同時設定多個屬性。
btn.config(text='點選!', command=clicked)
# 還可使用控件的構造函數來配置控件
Button(text='Click me too!', command=clicked).pack()
# 調用函數mainloop以進入Tkinter主事件循環,而不是直接退出程式。
mainloop()
           

布局

  1. 對控件調用方法pack時,将把控件放在其父控件(主要件)中。
  2. 要指定主要件,可使用構造函數的第一個可選參數;如果沒有指定,将把頂級主視窗用作主要件
from tkinter import *
Label(text="I'm in the first window!").pack() 
second = Toplevel() 
Label(second, text="I'm in the second window!").pack() 
           
  1. Toplevel類表示除主視窗外的另一個頂級視窗,而Label就是文本标簽。
  2. 沒有提供任何參數時,pack從視窗頂部開始将控件堆疊成一列,并讓它們在視窗中水準居中。
  3. 所幸可調整控件的位置和拉伸方式。
  4. 要指定将控件停靠在哪一條邊上,可将參數side設定為LEFT、RIGHT、TOP或BOTTOM。
  5. 要讓控件在x或y方向上填滿配置設定給它的空間,可将參數fill設定為X、Y或BOTH。
  6. 要讓控件随父控件(這裡是視窗)一起增大,可将參數expand設定為True。
  7. 要快速了解可用的選項,可執行如下指令:help(Pack.config)
  8. 還有其他的布局管理器,具體地說是grid和place,它們可能更能滿足你的需求。
  9. 在一個容器(如視窗)中應隻使用一種布局管理器
  10. 方法grid讓你能夠這樣排列控件:将它們放在不可見的表格單元格中.
  11. 為此需要指定參數row和column,還可能要指定參數rowspan或columnspan——如果控件橫跨多行或多列。
  12. 方法place讓你能夠手工放置控件——通過指定控件的x和y坐标以及高度和寬度來做到。

事件處理

  1. Tkinter還提供了更通用的事件處理機制:方法bind
from tkinter import *
top = Tk()
def callback(event):
    print(event.x, event.y)

top.bind('<Button-1>', callback)
help(Tk.bind)
           

最終的程式

from tkinter import *
from tkinter.scrolledtext import ScrolledText

def load():
    with open(filename.get()) as file:
        contents.delete('1.0', END)
        contents.insert(INSERT, file.read())

def save():
    with open(filename.get(),'w') as file:
        file.write(contents.get('1.0', END))

top = Tk()
top.title('Simple Editor')

contents = ScrolledText()
contents.pack(side=BOTTOM, expand=True, fill=BOTH)

filename = Entry()
filename.pack(side=LEFT, expand=True, fill=X)

Button(text='打開', command=load).pack(side=LEFT)
Button(text='儲存', command=save).pack(side=LEFT)

mainloop()
           

使用其它GUI工具包

  1. 在Tkinter中,要給元件添加事件處理程式,可使用方法bind