Tkinter Entry輸入控件

        Entry控件是Tkinter GUI編程中的基礎控件之一,它的作用就是允許用戶輸入内容,從而實現GUI程序與用戶的交互,比如儅用戶登錄軟件時,輸入用戶名和密碼,此時就需要使用Entry控件。

        Entry控件的基本語法格式如下:        

tk_entry = Entry(master, option, ...)

        基本屬性

        

Entry控件特有屬性説明
exportselection默認情況下,如果在輸入框中選中文本會複製到粘貼板,如果要忽略這個功能,可以設置為exportselection=0
selecbackground選中文字時的背景顔色
selecforeground選中文字時的前景色
show指定文本框内容以何種樣式的字符顯示,比如密碼可以將值設置爲show = ”*“
textvariable輸入框内值,也稱動態字符串,使用StringVar()對象來設置,而text為靜態字符串對象

xscrollcommand

設置輸入框内容滾動條

        1)動態數據類型

        上述表格中提及了StringVar()方法,和其同類型的方法還有BooleanVar()、DoubleVar()、IntVar(),他們分別代表一種數據類型,即字符串、布爾值、浮點型、整型,這些方法並不屬於Python内置方法,而是Tkinter特有的方法。

        在界面編程的過程中,儅需要”動態跟蹤“一些變量值的變化,從而保證值得變換能及時的反應到顯示界面上,而Python内置的數據類型無法滿足這一目的時,需要使用Tcl内置的對象,把這些方法創建的數據類型稱爲”動態類型“。

        下面是”動態字符串“的演示示例:

import tkinter as tk
import time

#創建主窗口
root = tk.Tk()

#設置主窗口名
root.title("演示示例")

#設置logo
root.iconbitmap("C:/Users/Administrator/Desktop/1.ico")

#設置主窗口大小
root.geometry("450x150+100+100")

#禁止調整主窗口大小
root.resizable(0, 0)

#修改主窗口名
root.title("我們的時鐘")

#獲取時間的函數
def gettime():
    #獲取當前時間
    dstr.set(time.strftime("%H:%M:%S"))
    #每隔1s調用一次gettime()函數來獲取時間
    root.after(1000, gettime)

#生成動態字符串
dstr = tk.StringVar()

#利用textvariable來實現文本變化
lb = tk.Label(root, textvariable = dstr, fg = 'green', font = ("微軟雅黑", 85))

lb.pack()

#調用生成時間的函數
gettime()

#顯示主窗口
root.mainloop()

        代碼運行結果如下:

屏幕录制 2025-03-10 180510

        常用方法

        

Entry常用方法
方法説明
delete()根據索引值刪除輸入框内的值
get()獲取輸入框内的值
set()設置輸入框内的值
insert()在指定的位置插入字符串
index()返回指定的索引值
select_clear()取消選中狀態
select_adjust()確保輸入框中的範圍包含index參數所指定的字符,選中指定索引和光標所在位置之前的字符
select_from(index)設置一個新的選中範圍,通過索引值index來設置
select_present()返回輸入框是否有處於選中狀態的文本,如果有則返回true,否則返回false
select_to()選中指定索引與光標之間的所有值
select_range()

選中指定索引與光標之間的所有值,參數值為start,end,要求start必須小於end

        注意:在Entry控件中,可以通過以下方式來指定字符的所在位置:

        *數字索引:表示從0開始的索引數字;

        *”ANCHOE“:在存在字符的情況下,它對應第一個被選中的字符

        *”END“:對應已存在文本中的最後一個位置

        *”insert(index,"字符")“:將字符插入到index指定的索引位置

        具體示例如下:

import tkinter as tk

#設置主窗口
window = tk.Tk()

#設置主窗口大小
window.geometry("250x100")

#設置主窗口名
window.title("演示示例")

#設置主窗口logo
#window.iconbitmap("C:/Users/Administrator/Desktop/1.ico")

#禁止調整主窗口大小
window.resizable(0,0)

#創建輸入框控件
entry1 = tk.Entry(window)

#放置輸入框,并設置位置
entry1.pack(padx = 20, pady = 20)

#根據索引值,刪除輸入框内的值
entry1.delete(0, "end")

#插入默認文本
entry1.insert(0,"演示示例")

#得到輸入框字符串
print(entry1.get())

#刪除所有字符
#entry1.delete(0, tk.END)

#顯示主窗口
window.mainloop()

   代碼運行結果如下:

        Entry控件簡單示例1:

import tkinter as tk

#設置主窗口
window = tk.Tk()

#設置主窗口大小
window.geometry("250x100")

#設置主窗口名
window.title("演示示例")

#設置主窗口logo
#window.iconbitmap("1.ico")

#禁止修改主窗口界面大小
window.resizable(0,0)

#新建文本標簽
label1 = tk.Label(window, text = "賬號:")
label2 = tk.Label(window, text = "密碼:")

#grid()控件佈局管理器,以行、列的形式對控件進行佈局,後續會做詳細介紹
label1.grid(row = 0)
label2.grid(row = 1)

#為上面的文本標簽,創建兩個輸入框控件
entry1 = tk.Entry(window)
entry2 = tk.Entry(window)

#對控件進行佈局管理,放在文本標簽的後面
entry1.grid(row = 0, column = 1)
entry2.grid(row = 1, column = 1)

#顯示主窗口
window.mainloop()

        代碼運行結果如下所示:

         

        Entry控件驗證功能

        

Entry控件驗證功能
參數説明
validate指定驗證方式,字符串參數,參數值有focus、focusin、focusout、key、all、none
validatecommand指定用戶自定義的驗證函數,該函數只能返回True或False
invalidcommand儅validatecommand指定的驗證函數返回False時,可以使用該參數再指定一個驗證函數

        對validate的參數值進行檢點介紹:

validate參數值的簡單介紹
參數值説明
focus儅Entry組件獲得或失去焦點的時候驗證
focusin儅Entry組件獲得焦點的時候驗證
focuson儅Entry組件失去焦點的時候驗證
key儅輸入框被編輯的時候驗證
all儅出現上面任何一種情況的時候驗證
none默認不啓用驗證功能,需要注意的是這裏是字符串的"none

        具體代碼如下:

import tkinter as tk
from tkinter import messagebox

# 創建主窗口
window = tk.Tk()

# 設置窗口大小和位置
window.geometry("250x200+250+200")

# 設置窗口標題
window.title("演示示例")

# 設置窗口圖標(備注:這段代碼在原文件中是備注掉的,這裡不需要)
# window.iconbitmap("1.ico")

# 禁止調整窗口大小
window.resizable(0, 0)

# 定義驗證函數,用於檢查輸入框中的內容
def check():
    if entry1.get() == "演示示例":
        # 如果輸入框中的內容是 "演示示例",顯示信息框並返回 True
        messagebox.showinfo("輸入正確")
        return True
    else:
        # 如果輸入框中的內容不是 "演示示例",顯示警告框,清空輸入框並返回 False
        messagebox.showwarning("輸入不正確")
        entry1.delete(0, tk.END)
        return False

# 創建標籤,顯示 "賬號:"
label1 = tk.Label(window, text="賬號:")

# 創建標籤,顯示 "密碼:"
label2 = tk.Label(window, text="密碼:")

# 使用 grid 布局管理器放置標籤
label1.grid(row=0)
label2.grid(row=1)

# 創建一個 StringVar 對象,用於綁定到輸入框
dy_string = tk.StringVar()

# 創建輸入框,綁定到 dy_string,並設置驗證命令
entry1 = tk.Entry(window, textvariable=dy_string, validate="focusout", validatecommand=check)

# 創建另一個輸入框
entry2 = tk.Entry(window)

# 使用 grid 布局管理器放置輸入框
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)

# 進入主事件循環
window.mainloop()

        代碼運行結果如下:

        Tkinter為驗證函數還提供了一些額外的選項,這些額外的選項需要使用Register()方法:

register()方法
選項説明
%d有3個參數值:0表示刪除操作、1表示插入操作、2表示獲得或失去焦點等
%i儅用戶進行插入或者刪除操作時,該選項表示插入或者刪除的索引位置
%P指定輸入框的文本内容
%s調用驗證函數前輸入框内的文本内容
%S表示被刪除或插入的内容

%v

當前Entry控件的validate的值
%V表示觸發驗證函數的原因
%W表示控件類型,即控件名字

        代碼示例如下:

import tkinter as tk
from tkinter import messagebox

# 創建主窗口
window = tk.Tk()

# 設置窗口大小和位置
window.geometry("250x200+250+200")

# 設置窗口標題
window.title("演示示例")

# 設置窗口圖標(備注:這段代碼在原文件中是備注掉的,這裡不需要)
# window.iconbitmap("1.ico")

# 禁止調整窗口大小
window.resizable(0, 0)



# 創建標籤,顯示 "賬號:"
label1 = tk.Label(window, text="賬號:")

# 創建標籤,顯示 "密碼:"
label2 = tk.Label(window, text="密碼:")

# 使用 grid 布局管理器放置標籤
label1.grid(row=0)
label2.grid(row=1)

# 創建一個 StringVar 對象,用於綁定到輸入框
dy_string = tk.StringVar()

# 定義驗證函數,用於檢查輸入框中的內容
def check(strings, reason, id):
    if entry1.get() == "演示示例":
        # 如果輸入框中的內容是 "演示示例",顯示信息框並返回 True
        messagebox.showinfo("輸入正確")
        print(strings, reason, id)
        return True
    else:
        # 如果輸入框中的內容不是 "演示示例",顯示警告框,清空輸入框並返回 False
        messagebox.showwarning("輸入不正確")
        print(strings, reason, id)
        return False

CheckTest = window.register(check)

# 創建輸入框,綁定到 dy_string,並設置驗證命令
entry1 = tk.Entry(window, textvariable=dy_string, validate="focusout", validatecommand=(CheckTest, '%P', '%V', '%W'))

# 創建另一個輸入框
entry2 = tk.Entry(window)

# 使用 grid 布局管理器放置輸入框
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)

# 進入主事件循環
window.mainloop()

        代碼運行結果如下:

        實例演示——計算機小程序 

from tkinter import *

# 創建主窗口
window = Tk()

# 設置窗口大小和位置
window.geometry("250x200+250+200")

# 設置窗口標題
window.title("演示示例")

# 設置窗口圖標(備注:這段代碼在原文件中是備注掉的,這裡不需要)
# window.iconbitmap("1.ico")

# 創建一個框架,用於組織窗口中的部件
frame = Frame(window)

# 創建一個標籤,用於顯示計算結果
label1 = Label(frame)

# 創建一個輸入框,用於輸入計算表達式
entry = Entry(frame)

# 創建一個 StringVar 對象,用於綁定到輸入框
expression = StringVar()

# 將 StringVar 對象綁定到輸入框
entry["textvariable"] = expression

# 定義計算函數,用於評估輸入框中的表達式並顯示結果
def calc():
    try:
        # 評估輸入框中的表達式並將結果轉換為字符串
        result = "=" + str(eval(expression.get()))
        # 更新標籤的文本為計算結果
        label1.config(text=result)
    except Exception as e:
        # 如果發生錯誤,顯示錯誤信息
        label1.config(text="錯誤")
        print(f"計算錯誤: {e}")

# 創建一個按鈕,點擊時調用 calc 函數
button1 = Button(frame, text="等於", command=calc)

# 設置輸入框獲得焦點
entry.focus()

# 使用 pack 布局管理器放置框架
frame.pack()

# 使用 pack 布局管理器放置輸入框
entry.pack()

# 使用 pack 布局管理器放置標籤,並設置其位置在左側
label1.pack(side="left")

# 使用 pack 布局管理器放置按鈕,並設置其位置在右側
button1.pack(side="right")

# 進入主事件循環
window.mainloop()

        代碼運行結果如下所示:

Spinbox高級輸入框

        spinbox是Entry控件的升級版,是Tkinter版本后新增的控件,該控件不僅允許用戶直接輸入内容,還支持用戶使用微調選擇器,即上下按鈕來輸入内容。

        代碼示例如下:

import tkinter as tk

# 創建主窗口
window = Tk()

# 設置窗口大小和位置
window.geometry("250x200+250+200")

# 設置窗口標題
window.title("演示示例")

# 設置窗口圖標(備注:這段代碼在原文件中是備注掉的,這裡不需要)
# window.iconbitmap("1.ico")


wind = tk.Spinbox(window, from_ = 0, to = 20, increment = 2, width = 15, bg = "#9BCD9B")

wind.pack()

window.mainloop()

        代碼運行結果如下所示: 

儅采用字符串形式時,需要使用values參數以元組的形式進行傳參,具體如下:

import tkinter as tk

# 創建主窗口
window = tk.Tk()

# 設置窗口大小和位置
window.geometry("250x200+250+200")

# 設置窗口標題
window.title("演示示例")

# 設置窗口圖標(備注:這段代碼在原文件中是備注掉的,這裡不需要)
# window.iconbitmap("1.ico")


wind = tk.Spinbox(window, values = ('Python', 'java', 'C語言', 'PHP'))

wind.pack()

window.mainloop()

        代碼運行結果如下所示:

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值