1. 程式人生 > >python基礎教程(第三版)學習筆記(十二)

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']="點選我"

1541565702130

​ 圖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()

1541566892164

​ 圖12-4

12.1.2 佈局

對控制元件呼叫方法pack時,將把控制元件放在其父控制元件(主控制元件)中。主視窗本身是一個Toplevel,也可以在主視窗外新增額外的視窗,可以把不同功能的控制元件分到不同視窗上,也可以用來當彈窗使用。像其它button、label這類的小控制元件,在建立時總需要傳入一個視窗。

second = tk.Toplevel(top)

1541568340636

​ 圖12-6

給副視窗新增屬性,幷包含一個標籤。

second = tk.Toplevel(top)
second.title("副視窗")
sublab=tk.Label(second )
sublab.pack()
sublab['text']="這是一個在副視窗中的標籤。"

1541569731011

​ 圖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一要選對包,二要看參考手冊甚至原始碼等資料,三要勤奮。