python基礎教程(第三版)學習筆記(十二)
第十二章 圖形使用者介面
12.1 建立 GUI 示例應用程式
編寫一個簡 單的程式,讓使用者能夠編輯文字檔案
這個微型文字編輯器的需求如下。
1、 讓使用者能夠開啟指定的文字檔案。
2、 讓使用者能夠編輯文字檔案。
3、 讓使用者能夠儲存文字檔案。
4、讓使用者能夠退出。
編寫GUI程式時,繪製其使用者介面草圖通常很有幫助。圖12-1顯示了一個可滿足前述文字編 輯器需求的簡單佈局。
這些介面元素的用法如下。 在按鈕左邊的文字框中輸入檔名,再單擊Open按鈕開啟這個檔案,它包含的文字將出 現在底部的文字框中。 在底部的大型文字框中,你可隨心所欲地編輯文字。 要儲存所做的修改,可單擊Save按鈕,這將把大型文字框的內容寫入到頂部文字框指定 的檔案中。 沒有Quit(退出)按鈕,使用者只能使用預設Tkinter選單中的Quit命令來退出程式。
12.1.1 初探
首先,必須匯入tkinter。為保留其名稱空間,同時減少輸入量,可能需要將其重新命名。
import tkinter as tk
要建立GUI,可建立一個將充當主視窗的頂級元件(控制元件)。為此,可例項化一個Tk物件。
import tkinter as tk
top=tk.Tk()
top.mainloop() #呼叫函式mainloop以進入Tkinter主事件迴圈
此時將出現一個視窗如下:。
圖12-2
新增按鈕:
btn=tk.Button(top)
現在這個按鈕是不可見的——你需要使用佈局管理器(也叫幾何體管理器)來告訴Tkinter 將它放在什麼地方。
圖12-3
控制元件包含各種屬性,我們可以使用它們來修改控制元件的外觀和行為。
btn['text']="點選我"
圖12-4
給按鈕新增行為也非常簡單。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
import tkinter as tk
top = tk.Tk() #建立主視窗
top.title("第一個視窗") #主視窗標題
top.geometry('500x200') #設定主視窗大小
lab = tk.Label(top, text='') #新增標籤
lab.pack()
btn = tk.Button(top) #新增按鈕
btn.pack()
btn['text'] = "這是按鈕" #給btn按鈕text屬性賦值
def click(): #定義事件函式
lab['text'] = "那是誰呀,按了按鈕就沒下文了?"
btn['command'] = click #給btn按鈕繫結事件
top.mainloop()
圖12-4
12.1.2 佈局
對控制元件呼叫方法pack時,將把控制元件放在其父控制元件(主控制元件)中。主視窗本身是一個Toplevel,也可以在主視窗外新增額外的視窗,可以把不同功能的控制元件分到不同視窗上,也可以用來當彈窗使用。像其它button、label這類的小控制元件,在建立時總需要傳入一個視窗。
second = tk.Toplevel(top)
圖12-6
給副視窗新增屬性,幷包含一個標籤。
second = tk.Toplevel(top)
second.title("副視窗")
sublab=tk.Label(second )
sublab.pack()
sublab['text']="這是一個在副視窗中的標籤。"
圖12-7
(可能由於版本的不同,書中的一些程式碼不能實現,所以只能這樣了。有些引數設定可以參見nkd50000 的部落格小白學tkinter(常用引數大總結)。地址:https://blog.csdn.net/nkd50000/article/details/77322312
12.1.3 事件處理
可通過設定屬性command給按鈕指定動作(action)。這是一種特殊的事件處理,但 Tkinter還提供了更通用的事件處理機制:方法bind。要讓控制元件對特定的事件進行處理,可對其調 用方法bind,並指定事件的名稱和要使用的函式。下面是一個示例:
import tkinter as tk
top = tk.Tk() #建立一個視窗
def callback(event): #定義事件
print(event.x, event.y) #獲取滑鼠左鍵點選的座標,列印輸出。
top.bind('<Button-1>', callback) #繫結事件,<Button-1>是使用滑鼠左按鈕(按鈕1)單擊的事件名稱。
top.mainloop()
事件的完整的清單可使用下面的命令來獲取:
import tkinter as tk
help(tk.Tk.bind)
12.1.4 最終的程式
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("簡單文字編輯器")
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()
圖12-8
儲存之後,會產生一個你好檔案:
圖12-9
12.2 使用其他 GUI 工具包
python除內建的TkinterGUI包之外,還有很多的第三方GUI供選擇,但每個包的功能雖然大同小異,其使用時的函式、引數及函式呼叫方法不盡相同,因此初學PythonGUI一要選對包,二要看參考手冊甚至原始碼等資料,三要勤奮。