|
|
|||||||||||||||||||||||||||||
| Tkinter Entry Widgets. |
H.Kamifuji . |
|
エントリウィジェットは、アプリケーションのユーザから入力(テキスト文字列)を取得するために使用されるTkinterの基本ウィジェットです。このウィジェットを使用すると、1行のテキストを入力できます。ユーザーがウィジェットの利用可能な表示スペースよりも長い文字列を入力すると、コンテンツがスクロールされます。これは、文字列全体が見えないことを意味します。矢印キーは、文字列の目に見えない部分に移動するために使用できます。複数行のテキストを入力する場合は、テキストウィジェットを使用する必要があります。 エントリーウィジェットも単一フォントに制限されています。 エントリウィジェットの構文は次のようになります。 w = Entry(master, option, ... ) "master" は親ウインドウを表し、エントリウィジェットを置く必要があります。 他のウィジェットと同様、オプションを使用してウィジェットの>レンダリングにさらに影響を与えることができます。 カンマ区切りのオプションリストは空白にすることができます。 |
次の簡単な例では、2 つの入力フィールドを持つアプリケーションを作成します。 姓を入力するためのものと名のためのもの。 オプションなしで 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( )前のスクリプトで作成されたウィンドウは次のようになります。 ![]() さて、エントリーフィールドを作成して、プログラムのユーザーがデータを入力できるようにしました。 しかし、私たちのプログラムはこのデータにどのようにアクセスできますか? どのようにしてエントリーの内容を読むのですか? 一言で言えば、get() メソッドは私たちが探しているものです。 小さなスクリプトを「Quit」と「Show」の2つのボタンで拡張します。 Entry オブジェクトの get() メソッドを使用している show_entry_fields() 関数を Show ボタンにバインドします。したがって、このボタンがクリックさ>れるたびに、入力フィールドの内容がスクリプトを呼び出した端末に表示されます。
from tkinter import *
def show_entry_fields():
print("First Name: %s\nLast 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」または「Baker」、名字として「Jack」または「Jill」を記入します。 新しいバージョンの Python プログラムは、次の2行を取得します。これは、エントリ定義の後に追加することができます。つまり、"e2 = Entry(master)" です。 nsert(10,"Miller") e2.insert(10,"Jill")Entry オブジェクトの入力を削除すると、毎回、関数 show_entry_fields() にコンテンツが表示されますか? 問題ない! delete メソッドを使うことができます。 delete() メソッドの形式は delete(first、last = None) です。 1 つの数字だけが与えられた場合、それはインデックスの文字を削除します。 2 つを指定すると、"first" から "last" までの範囲が削除されます。 ウィジェット内のすべてのテキストを削除するには、delete(0、END) を使用します。
from tkinter import *
def show_entry_fields():
print("First Name: %s\nLast 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( )
![]() 次の例は、どのようにエレファントに多くのエントリフィールドをより Python の方法で作成できるかを示しています。 Python のリストを使用して、アプリケーションにラベルとして含める項目の説明を保持します。
#!/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('
この Python スクリプトを起動すると、次のようになります。 ![]() |
私たちは実際に電卓を書いているわけではないが、数学的表現を評価して結果を印刷することができる GUI を提供しています。
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("
ウィジェットは次のようになります: ![]() |
次の式を使用して、初期残高(ローン元本とも呼ばれます)および期間比率rから開始して、支払後の残高Bk(残高指数)を計算することができます。![]() ここで rate = 金利(%)。 e.g. 3 % i = rate / 100、10進形式の年間レート r = 期間率 = i / 12 B0 = ローン元本とも呼ばれる初期残高 Bk = 支払い後の残高 k = 月額支払いの数 p = 期間(月額)支払い 支払がnで支払われるべきである場合に必要な毎月の支払いを探したい場合は、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('
私たちが Python3 でそれを始めるならば、私たちのローン計算機は次のようになります: ![]() |
| Entry Widgets |
|