摘要:已獲原作者授權原系列地址簡介是用來接收字符串等輸入的控件該控件允許用戶輸入一行文字如果用戶輸入的文字長度長于控件的寬度時文字會向后滾動這種情況下所輸入的字符串無法全部顯示點擊箭頭符號可以將不可見的文字部分移入可見區域如果你想要輸入多行文本就
已獲原作者授權. 原系列地址: Python Tkinter簡介
Entry 是 Tkinter 用來接收字符串等輸入的控件. 該控件允許用戶輸入一行文字. 如果用戶輸入的文字長度長于 Entry 控件的寬度時, 文字會向后滾動. 這種情況下所輸入的字符串無法全部顯示. 點擊箭頭符號可以將不可見的文字部分移入可見區域. 如果你想要輸入多行文本, 就需要使用 Text 控件. Entry 控件只能使用預設字體.
使用 Entry 控件的語法如下:
w = Entry(master, option, ...)
master 參數為其父控件, 就是用來放置這個 Entry 的控件. 像其他控件一樣, 我們可以在創建 Entry 控件之后再為其指定屬性. 因此創建方法中的 options 選項可以為空.
下例為一個顯示了兩個 Entry 控件的應用. 一個用來輸入姓氏, 一個用來輸入名字. 我們用不帶參數的構造方法創建 Entry.
from tkinter import * master = Tk() Label(master, text="First Name").grid(row=0) Label(master, text="Last Name").grid(row=1) e1 = Entry(master) e2 = Entry(master) e1.grid(row=0, column=1) e2.grid(row=1, column=1) mainloop( )
上面代碼運行后生成如下窗口:
現在我們已經創建了兩個 Entry, 用戶可以在這個應用中輸入數據. 但我們的程序如何得到這些數據呢?
方法很簡單, 調用 Entry 類的 get() 方法即可. 我們改進了上面的程序, 添加了 "退出" 和 "顯示" 兩個按鈕. 在 "顯示" 按鈕上, 我們綁定了 show_entry_fields() 函數, 該函數會調用 Entry 類的 get() 方法. 這樣每次 "顯示" 按鈕被點擊, Entry 控件的內容就會打印在終端里.
from tkinter import * def show_entry_fields(): print("First Name: %s Last Name: %s" % (e1.get(), e2.get())) master = Tk() Label(master, text="First Name").grid(row=0) Label(master, text="Last Name").grid(row=1) e1 = Entry(master) e2 = Entry(master) e1.grid(row=0, column=1) e2.grid(row=1, column=1) Button(master, text="Quit", command=master.quit).grid(row=3, column=0, sticky=W, pady=4) Button(master, text="Show", command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4) mainloop( )
上面的代碼運行后顯示下面的窗口:
現在我們希望在 Entry 控件上顯示默認值. 比如, 我們希望姓氏輸入框的默認值為 "Miller", 名字輸入框的默認值為 "Jill". 我們只需要在 Entry 控件創建后加入如下兩行代碼:
e1.insert(10,"Miller") e2.insert(10,"Jill")
如果要在每次點擊 "顯示" 按鈕輸出內容后, 將 Entry 的顯示內容清空呢? 沒問題! 我們可以使用 Entry 類的 delete() 方法. 該方法的調用方式為 delete(first, last = None), 兩個參數都是整型. 如果只傳入一個參數, 則會刪除這個數字指定位置 (index) 上的字符. 如果傳入兩個參數, 則表示刪除從 "first" 到 "last" 指定范圍內的字符. 使用 delete(0, END) 可以刪除 Entry 控件已輸入的全部字符.
from tkinter import * def show_entry_fields(): print("First Name: %s Last Name: %s" % (e1.get(), e2.get())) e1.delete(0,END) e2.delete(0,END) master = Tk() Label(master, text="First Name").grid(row=0) Label(master, text="Last Name").grid(row=1) e1 = Entry(master) e2 = Entry(master) e1.insert(10,"Miller") e2.insert(10,"Jill") e1.grid(row=0, column=1) e2.grid(row=1, column=1) Button(master, text="Quit", command=master.quit).grid(row=3, column=0, sticky=W, pady=4) Button(master, text="Show", command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4) mainloop( )
下個例子中, 我們用更優雅的方式為多個字段創建了多個 Entry 控件. 我們用一個 list 來存儲每個 Entry 的描述字符串, 這些字符串用 Label 來顯示.
#!/usr/bin/python3 from tkinter import * fields = "Last Name", "First Name", "Job", "Country" def fetch(entries): for entry in entries: field = entry[0] text = entry[1].get() print("%s: "%s"" % (field, text)) def makeform(root, fields): entries = [] for field in fields: row = Frame(root) lab = Label(row, width=15, text=field, anchor="w") ent = Entry(row) row.pack(side=TOP, fill=X, padx=5, pady=5) lab.pack(side=LEFT) ent.pack(side=RIGHT, expand=YES, fill=X) entries.append((field, ent)) return entries if __name__ == "__main__": root = Tk() ents = makeform(root, fields) root.bind("", (lambda event, e=ents: fetch(e))) b1 = Button(root, text="Show", command=(lambda e=ents: fetch(e))) b1.pack(side=LEFT, padx=5, pady=5) b2 = Button(root, text="Quit", command=root.quit) b2.pack(side=LEFT, padx=5, pady=5) root.mainloop()
上面的代碼運行后產生如下窗口:
我們并非要寫一個功能全面的計算器, 我們要用 Entry 接受一個數學表達式并計算它, 并打印計算結果.
from Tkinter import * from math import * def evaluate(event): res.configure(text = "Ergebnis: " + str(eval(entry.get()))) w = Tk() Label(w, text="Your Expression:").pack() entry = Entry(w) entry.bind("", evaluate) entry.pack() res = Label(w) res.pack() w.mainloop()
我們的計算器顯示如下:
下面的公式可以用來計算余額: 給定本金 B0, 期利率 r, 在 k 期結算后的余額 Bk:
其中:
rate = 百分比表示的利率, 比如 3% i = rate / 100, 以小數表示的年利率 r = 期利率 = i / 12 B0 = 初始余額, 即本金 Bk = k 期后的余額 k = 期數 (月數) p = 每月利息
如果要每月結息, 我們就要計算每月應付利息. 我們將公式中的 Bn 設為 0, 得到以下公式:
其中:
n = 總期數 (總月數)
#!/usr/bin/python3 from tkinter import * fields = ("Annual Rate", "Number of Payments", "Loan Principle", "Monthly Payment", "Remaining Loan") def monthly_payment(entries): # period rate: r = (float(entries["Annual Rate"].get()) / 100) / 12 print("r", r) # principal loan: loan = float(entries["Loan Principle"].get()) n = float(entries["Number of Payments"].get()) remaining_loan = float(entries["Remaining Loan"].get()) q = (1 + r)** n monthly = r * ( (q * loan - remaining_loan) / ( q - 1 )) monthly = ("%8.2f" % monthly).strip() entries["Monthly Payment"].delete(0,END) entries["Monthly Payment"].insert(0, monthly ) print("Monthly Payment: %f" % float(monthly)) def final_balance(entries): # period rate: r = (float(entries["Annual Rate"].get()) / 100) / 12 print("r", r) # principal loan: loan = float(entries["Loan Principle"].get()) n = float(entries["Number of Payments"].get()) q = (1 + r)** n monthly = float(entries["Monthly Payment"].get()) q = (1 + r)** n remaining = q * loan - ( (q - 1) / r) * monthly remaining = ("%8.2f" % remaining).strip() entries["Remaining Loan"].delete(0,END) entries["Remaining Loan"].insert(0, remaining ) print("Remaining Loan: %f" % float(remaining)) def makeform(root, fields): entries = {} for field in fields: row = Frame(root) lab = Label(row, width=22, text=field+": ", anchor="w") ent = Entry(row) ent.insert(0,"0") row.pack(side=TOP, fill=X, padx=5, pady=5) lab.pack(side=LEFT) ent.pack(side=RIGHT, expand=YES, fill=X) entries[field] = ent return entries if __name__ == "__main__": root = Tk() ents = makeform(root, fields) root.bind("", (lambda event, e=ents: fetch(e))) b1 = Button(root, text="Final Balance", command=(lambda e=ents: final_balance(e))) b1.pack(side=LEFT, padx=5, pady=5) b2 = Button(root, text="Monthly Payment", command=(lambda e=ents: monthly_payment(e))) b2.pack(side=LEFT, padx=5, pady=5) b3 = Button(root, text="Quit", command=root.quit) b3.pack(side=LEFT, padx=5, pady=5) root.mainloop()
在 Python3 中, 上面程序顯示如下窗口:
全系列:
[譯][Tkinter 教程01] 入門: Label 控件
[譯][Tkinter 教程02] Message 控件
[譯][Tkinter 教程03] Button 控件
[譯][Tkinter 教程04] Variable 類
[譯][Tinkter 教程05] Radiobutton 控件
[譯][Tkinter 教程06] Checkbox 控件
[譯][Tkinter 教程07] Entry 控件
[譯][Tkinter 教程08] Canvas 圖形繪制
[譯][Tkinter 教程09] Scale 控件
[譯][Tkinter 教程10] Text 控件
[譯][Tkinter 教程11] 對話框和消息框
[譯][Tkinter 教程12] 布局管理 (Pack Place Grid)
[譯][Tkinter 教程13] Mastermind 游戲
[譯][Tkinter 教程14] menu 菜單
[譯][Tkinter 教程15] event 事件綁定
譯者水平有限, 如有疏漏, 歡迎指正.
已獲得原作者授權. 原文地址: Entry Widgets
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41482.html
摘要:已獲原作者授權原系列地址類有些控件比如控件控件等可以通過傳入特定參數直接和一個程序變量綁定這些參數包括這種綁定是雙向的如果該變量發生改變與該變量綁定的控件也會隨之更新這些控制變量和一般的變量一樣都是用來保存某個值的但一般的變量不能被傳遞給或 已獲原作者授權. 原系列地址: Python Tkinter Variable 類 有些控件 (比如 Entry 控件, Radiobutton...
摘要:已獲原作者授權原系列地址簡介中的控件是一種可供用戶通過拖動指示器改變變量值的控件這種控件可以水平放置也可以豎直放置可以在用戶界面中放置一個控件用戶通過拖動該控件就可以在某個取值范圍內選擇一個合適的值控件可以設置最大最小值以確定取值范圍我們也 已獲原作者授權. 原系列地址: Python Tkinter 簡介 Tkinter 中的 Scale 控件是一種可供用戶通過拖動指示器改變變量值...
摘要:已獲原作者授權原系列地址簡介控件是一種標準控件用來展現不同樣式的按鈕控件被用以和用戶交互比如按鈕被鼠標點擊后某種操作被啟動和控件類似按鈕可以展示圖片或者文字不同的是控件可以指定字體控件只能使用單一的字體上的文字可以多行顯示可以將一個函數或方 已獲原作者授權. 原系列地址: Python Tkinter 簡介 Button 控件是一種標準 Tkinter 控件, 用來展現不同樣式的按鈕...
摘要:已獲原作者授權原系列地址簡介一提到這個詞很多人首先想到的是餐館里的菜單雖然餐館菜單和計算機程序中的菜單看起來一點也不像但他們確實有很多共同點在餐館中菜單列舉了所有菜品和飲料在計算機程序中菜單通過圖形界面展示了應用程序可用的命令和功能在用戶界 已獲原作者授權. 原系列地址: Python Tkinter 簡介 一提到menu這個詞, 很多人首先想到的是餐館里的菜單. 雖然餐館菜單和計算...
摘要:已獲原作者授權原系列地址控件控件用來展示一些文字短消息和控件有些類似但在展示文字方面比要靈活比如控件可以改變字體而控件只能使用一種字體它提供了一個換行對象以使文字可以斷為多行它可以支持文字的自動換行及對齊這里要澄清一下前面提到的控件可以改變 已獲原作者授權. 原系列地址: Python Tkinter Message 控件 Message 控件用來展示一些文字短消息. Message...
閱讀 3026·2021-11-24 09:39
閱讀 2255·2021-10-08 10:05
閱讀 2749·2021-09-24 13:52
閱讀 1569·2021-09-22 15:07
閱讀 589·2019-08-30 15:55
閱讀 1808·2019-08-30 15:53
閱讀 687·2019-08-30 15:44
閱讀 3116·2019-08-30 11:20