亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

[譯][Tkinter 教程07] Entry 控件

levy9527 / 3588人閱讀

摘要:已獲原作者授權(quán)原系列地址簡(jiǎn)介是用來接收字符串等輸入的控件該控件允許用戶輸入一行文字如果用戶輸入的文字長(zhǎng)度長(zhǎng)于控件的寬度時(shí)文字會(huì)向后滾動(dòng)這種情況下所輸入的字符串無法全部顯示點(diǎn)擊箭頭符號(hào)可以將不可見的文字部分移入可見區(qū)域如果你想要輸入多行文本就

已獲原作者授權(quán). 原系列地址: Python Tkinter
簡(jiǎn)介

Entry 是 Tkinter 用來接收字符串等輸入的控件. 該控件允許用戶輸入一行文字. 如果用戶輸入的文字長(zhǎng)度長(zhǎng)于 Entry 控件的寬度時(shí), 文字會(huì)向后滾動(dòng). 這種情況下所輸入的字符串無法全部顯示. 點(diǎn)擊箭頭符號(hào)可以將不可見的文字部分移入可見區(qū)域. 如果你想要輸入多行文本, 就需要使用 Text 控件. Entry 控件只能使用預(yù)設(shè)字體.
使用 Entry 控件的語法如下:
w = Entry(master, option, ...)
master 參數(shù)為其父控件, 就是用來放置這個(gè) Entry 的控件. 像其他控件一樣, 我們可以在創(chuàng)建 Entry 控件之后再為其指定屬性. 因此創(chuàng)建方法中的 options 選項(xiàng)可以為空.
下例為一個(gè)顯示了兩個(gè) Entry 控件的應(yīng)用. 一個(gè)用來輸入姓氏, 一個(gè)用來輸入名字. 我們用不帶參數(shù)的構(gòu)造方法創(chuàng)建 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( )

上面代碼運(yùn)行后生成如下窗口:

現(xiàn)在我們已經(jīng)創(chuàng)建了兩個(gè) Entry, 用戶可以在這個(gè)應(yīng)用中輸入數(shù)據(jù). 但我們的程序如何得到這些數(shù)據(jù)呢?
方法很簡(jiǎn)單, 調(diào)用 Entry 類的 get() 方法即可. 我們改進(jìn)了上面的程序, 添加了 "退出" 和 "顯示" 兩個(gè)按鈕. 在 "顯示" 按鈕上, 我們綁定了 show_entry_fields() 函數(shù), 該函數(shù)會(huì)調(diào)用 Entry 類的 get() 方法. 這樣每次 "顯示" 按鈕被點(diǎn)擊, Entry 控件的內(nèi)容就會(huì)打印在終端里.

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

上面的代碼運(yùn)行后顯示下面的窗口:

現(xiàn)在我們希望在 Entry 控件上顯示默認(rèn)值. 比如, 我們希望姓氏輸入框的默認(rèn)值為 "Miller", 名字輸入框的默認(rèn)值為 "Jill". 我們只需要在 Entry 控件創(chuàng)建后加入如下兩行代碼:

e1.insert(10,"Miller")
e2.insert(10,"Jill")

如果要在每次點(diǎn)擊 "顯示" 按鈕輸出內(nèi)容后, 將 Entry 的顯示內(nèi)容清空呢? 沒問題! 我們可以使用 Entry 類的 delete() 方法. 該方法的調(diào)用方式為 delete(first, last = None), 兩個(gè)參數(shù)都是整型. 如果只傳入一個(gè)參數(shù), 則會(huì)刪除這個(gè)數(shù)字指定位置 (index) 上的字符. 如果傳入兩個(gè)參數(shù), 則表示刪除從 "first" 到 "last" 指定范圍內(nèi)的字符. 使用 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( )

下個(gè)例子中, 我們用更優(yōu)雅的方式為多個(gè)字段創(chuàng)建了多個(gè) Entry 控件. 我們用一個(gè) list 來存儲(chǔ)每個(gè) 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()

上面的代碼運(yùn)行后產(chǎn)生如下窗口:

簡(jiǎn)易計(jì)算器

我們并非要寫一個(gè)功能全面的計(jì)算器, 我們要用 Entry 接受一個(gè)數(shù)學(xué)表達(dá)式并計(jì)算它, 并打印計(jì)算結(jié)果.

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

我們的計(jì)算器顯示如下:

利率計(jì)算器

下面的公式可以用來計(jì)算余額: 給定本金 B0, 期利率 r, 在 k 期結(jié)算后的余額 Bk:

其中:

rate = 百分比表示的利率, 比如 3%
i = rate / 100, 以小數(shù)表示的年利率
r = 期利率 = i / 12
B0 = 初始余額, 即本金
Bk = k 期后的余額
k = 期數(shù) (月數(shù))
p = 每月利息

如果要每月結(jié)息, 我們就要計(jì)算每月應(yīng)付利息. 我們將公式中的 Bn 設(shè)為 0, 得到以下公式:

其中:

n = 總期數(shù) (總月數(shù))
#!/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] 對(duì)話框和消息框
[譯][Tkinter 教程12] 布局管理 (Pack Place Grid)
[譯][Tkinter 教程13] Mastermind 游戲
[譯][Tkinter 教程14] menu 菜單
[譯][Tkinter 教程15] event 事件綁定
譯者水平有限, 如有疏漏, 歡迎指正.
已獲得原作者授權(quán). 原文地址: Entry Widgets

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/41482.html

相關(guān)文章

  • [][Tkinter 教程04] Variable 類

    摘要:已獲原作者授權(quán)原系列地址類有些控件比如控件控件等可以通過傳入特定參數(shù)直接和一個(gè)程序變量綁定這些參數(shù)包括這種綁定是雙向的如果該變量發(fā)生改變與該變量綁定的控件也會(huì)隨之更新這些控制變量和一般的變量一樣都是用來保存某個(gè)值的但一般的變量不能被傳遞給或 已獲原作者授權(quán). 原系列地址: Python Tkinter Variable 類 有些控件 (比如 Entry 控件, Radiobutton...

    zilu 評(píng)論0 收藏0
  • [][Tkinter 教程09] Scale 控件

    摘要:已獲原作者授權(quán)原系列地址簡(jiǎn)介中的控件是一種可供用戶通過拖動(dòng)指示器改變變量值的控件這種控件可以水平放置也可以豎直放置可以在用戶界面中放置一個(gè)控件用戶通過拖動(dòng)該控件就可以在某個(gè)取值范圍內(nèi)選擇一個(gè)合適的值控件可以設(shè)置最大最小值以確定取值范圍我們也 已獲原作者授權(quán). 原系列地址: Python Tkinter 簡(jiǎn)介 Tkinter 中的 Scale 控件是一種可供用戶通過拖動(dòng)指示器改變變量值...

    ralap 評(píng)論0 收藏0
  • [][Tkinter 教程03] Button 控件

    摘要:已獲原作者授權(quán)原系列地址簡(jiǎn)介控件是一種標(biāo)準(zhǔn)控件用來展現(xiàn)不同樣式的按鈕控件被用以和用戶交互比如按鈕被鼠標(biāo)點(diǎn)擊后某種操作被啟動(dòng)和控件類似按鈕可以展示圖片或者文字不同的是控件可以指定字體控件只能使用單一的字體上的文字可以多行顯示可以將一個(gè)函數(shù)或方 已獲原作者授權(quán). 原系列地址: Python Tkinter 簡(jiǎn)介 Button 控件是一種標(biāo)準(zhǔn) Tkinter 控件, 用來展現(xiàn)不同樣式的按鈕...

    googollee 評(píng)論0 收藏0
  • [][Tkinter 教程14] menu 菜單

    摘要:已獲原作者授權(quán)原系列地址簡(jiǎn)介一提到這個(gè)詞很多人首先想到的是餐館里的菜單雖然餐館菜單和計(jì)算機(jī)程序中的菜單看起來一點(diǎn)也不像但他們確實(shí)有很多共同點(diǎn)在餐館中菜單列舉了所有菜品和飲料在計(jì)算機(jī)程序中菜單通過圖形界面展示了應(yīng)用程序可用的命令和功能在用戶界 已獲原作者授權(quán). 原系列地址: Python Tkinter 簡(jiǎn)介 一提到menu這個(gè)詞, 很多人首先想到的是餐館里的菜單. 雖然餐館菜單和計(jì)算...

    joyqi 評(píng)論0 收藏0
  • [][Tkinter 教程02] Message 控件

    摘要:已獲原作者授權(quán)原系列地址控件控件用來展示一些文字短消息和控件有些類似但在展示文字方面比要靈活比如控件可以改變字體而控件只能使用一種字體它提供了一個(gè)換行對(duì)象以使文字可以斷為多行它可以支持文字的自動(dòng)換行及對(duì)齊這里要澄清一下前面提到的控件可以改變 已獲原作者授權(quán). 原系列地址: Python Tkinter Message 控件 Message 控件用來展示一些文字短消息. Message...

    JowayYoung 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<