用Tkinter打造GUI開發工具(15)Tkinter小部件的Button按鈕部件

用Tkinter打造GUI開發工具(15)Tkinter小部件的Button按鈕部件
在Tkinter中,Button按鈕部件也會經常用到,這節我們詳細講解Button部件的屬性和用法。
Button小部件是一個標準的Tkinter的部件,用於實現各種按鈕。按鈕可以包含文本或圖像,您可以調用Python函數或方法用於每個按鈕。 Tkinter的按鈕被按下時,會自動調用該函數或方法。該按鈕可以只顯示在一個單一字體的文本,但文本可能跨越一個以上的行。此外,一個字符可以有下劃線,例如標記的鍵盤快捷鍵。默認情況下,使用Tab鍵可以移動到一個按鈕部件。Button按鈕方法支持flash()和invoke()。
Button按鈕通常用於應用程序窗口,並接受鼠標點擊並執行相應的程序。
其語法格式如下。

button=tk.Button ( master, option=value, ... )

參數master 這代表了父窗口。options是這個部件的屬性選項列表。
Button部件的參數見表3-3。

在這裏插入圖片描述
Button部件的通用屬性,我們前面介紹過多次,我們主要介紹Button部件特有屬性的用法。
command屬性指定按鈕消息的回調函數,即鼠標左鍵按下後,Button按鈕執行command屬性指定的函數。
state屬性指定按鈕的狀態。NORMAL,ACTIVE 或 DISABLED。默認值爲NORMAL。如果state的值爲DISABLED,Button部件處在不可用狀態,即按鈕無法點擊,也不會執行command屬性指定的回調函數。
我們下面看一個按鈕示例程序,其中主要演示了帶參數的回調函數使用。

# -*- coding: utf-8 -*-
import tkinter as tk  #裝載tkinter模塊,用於Python3
def hello(x): #帶參數函數
    print('Hello '+x)

def hello2():  #不帶參數函數
    print('Hello ')
    
root=tk.Tk()  #創建Tkinter主窗口
root.title("Button演示")

b1=tk.Button(root,text="NORMAL B1",
             command=hello2,  #不帶參數函數
             activeforeground='red')  
b1.pack(side=tk.LEFT)

b2=tk.Button(root,text="NORMAL B2",
             command=hello('b2'), #帶參數函數
             activeforeground='red') 
b2.pack(side=tk.LEFT)

b3=tk.Button(root,text="NORMAL B3",
             command=lambda:hello('b3'),#帶參數函數
             activeforeground='red') 
b3.pack(side=tk.LEFT)

b4=tk.Button(root,text="ACTIVE b4",
             command=lambda:hello('b4'),  #帶參數函數
             state=tk.ACTIVE,  #按鈕激活狀態
             activeforeground='red') 
b4.pack(side=tk.LEFT)

b5=tk.Button(root,text="DISABLED b5",
             command=lambda:hello('b5'), #帶參數函數
             state=tk.DISABLED,  #按鈕禁用狀態
             activeforeground='red')

b5.pack(side=tk.LEFT)
print('--下面開始輸出鼠標點擊按鈕操作--')
root.mainloop()     # 進入消息循環

程序運行結果如下圖。
在這裏插入圖片描述
程序運行輸出結果:程序開始運行,就執行了b2按鈕的回調函數。輸出了“Hello b2”,順序點擊按鈕b1至b5,輸出結果如下。

Hello b2
--下面開始輸出鼠標點擊按鈕操作--
Hello 
Hello b3
Hello b4

我們發現b2按鈕回調函數在按鈕初始化時就執行了,其它帶參數的函數,因加上了“lambda:”,所以初始化時沒有執行,只有鼠標點擊時,纔會輸出按鈕信息。
b2按鈕command的回調函數,帶有參數,初始化時就執行過了,再次點擊b2按鈕,程序沒有執行動作。
b5按鈕state=tk.DISABLED,所以按鈕不可用,也沒法鼠標點擊操作。
b4按鈕state=tk.ACTIVE,程序運行後處在激活狀態,文字是紅色的(activeforeground=‘red’),鼠標滑過或點擊b4按鈕,b4按鈕恢復到正常狀態。
總結一下:Button部件command參數的回調函數,如果函數不帶參數,直接使用函數名。如果函數帶參數,需要使用lambda:function(參數表)的格式。
Button部件除了用鼠標點擊操作外,也可以使用鍵盤來操作。按鍵盤“Tab”鍵,會在默認的第一個按鈕上出現一個虛框。在此運行上面按鈕演示程序,按“Tab”鍵,見下圖。
在這裏插入圖片描述
如果再次按鍵盤“Tab”鍵,虛框會移動到按鈕“NORMAL B2”按鈕上。按下鍵盤上空格鍵,相當於點擊虛框選中的按鈕。
與Label部件的不同,Button部件除了有屬性外有一些方法。
Button部件的方法見表3-4。
在這裏插入圖片描述
invoke()方法可以在程序中模擬某個按鈕被按下時所執行的回調函數。
flash()方法可以使某個按鈕快速在普通和激活狀態下閃爍幾次。

本文接續作者書中內容,目前寫完的部分如下.

Python3下Tkinter高級編程參考_目錄

00.1 前言

第一章 Tkinter介紹
1.1 Tkinter介紹
1.2 Tkinter工作原理
1.3 Tkinter類的構成
1.4 Tkinter的窗口類
1.Tk類
2.Toplevel類
1.5 Tkinter的小部件類
1.6 Tkinter的變量類

第二章 Tkinter開發基礎
2.1 Tk主窗口
2.2 Toplevel彈出窗口
2.3 Tkinter的小部件
2.4 小部件的標準屬性

  1. 維度單位
  2. 座標系統
  3. 顏色
  4. 字體類型
  5. 對齊方式
  6. 浮雕風格
  7. 位圖
  8. 鼠標樣式
  9. 圖片
    2.4 小部件的pack佈局
    2.5 小部件的grid佈局
    2.6 小部件的place佈局
    2.7 Menu主菜單
    2.8 Menu彈出菜單
    2.9 如何命名窗口小部件類
    2.10 如何命名窗口小部件實例
    2.11 焦點:路由鍵盤輸入

第三章 Tkinter的部件
3.1 Label標籤部件
3.2 Frame框架部件
3.3 LabelFrame部件
3.4 Button按鈕部件
3.5 Entry部件
3.6 Menubutton部件
3.7 Checkbutton部件
3.8 Radiobutton部件
3.9 Scale部件
3.10 Spinbox部件
3.11 Scrollbar滾動條部件
3.12 Text文本框部件
3.13 Listbox
3.14 Message
3.15 OptionMenu
3.16 PanedWindow
3.17 Canvas

第四章 Tkinter的事件和綁定
4.1 控件綁定事件的級別
4.2 事件序列
4.3 事件類型
4.4 事件修飾符
4.5 鍵盤的鍵名
4.6 編寫事件類處理程序
4.7 編寫事件處理程序的特殊技巧
4.8 虛擬事件

第五章 Tkinter的彈出式對話框
5.1 tkMessageBox信息對話框模塊
5.2 tkFileDialog 文件對話框模塊
5.3 tkColorChooser顏色選擇器模塊

第六章 Tkinter主題小部件ttk
6.1 導入ttk模塊
6.2 ttk.Style
6.3 ttk.Widget主題小部件
6.4 所有ttk小部件共有的方法
6.5 ttk.Button
6.6 ttk.Checkbutton
6.7 ttk.Combobox
6.8 ttk.Entry
6.9 ttk.Frame
6.10 ttk.Label
6.11 ttk.Labelframe
6.12 ttk.Menubutton
6.13 ttk.Notebook
6.14 ttk.Panedwindow
6.15 ttk.Progressbar
6.16 ttk.Radiobutton
6.17 ttk.Scale
6.18 ttk.Scrollbar
6.19 ttk.Separator
6.20 ttk.Sizegrip
6.21 ttk.Spinbox
6.22 ttk.Treeview

第七章 Tkinter擴展小部件tix
7.1 使用Tix.Tk
7.2 tix.Form
7.3 tix.Balloon

如合作請練習.
編寫:獨狼荷蒲
QQ:2775205
電話微信:18578755056
Python Tkinter 開發羣:524949939
博客:https://me.csdn.net/hepu8

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章