Entry
フィールドを使用して手動入力を取得し、そのデータを操作しようとしています。
私が見つけたすべてのソースは、get()
関数を使用する必要があると主張していますが、まだ簡単な作業用のミニサンプルを見つけていません。
私が間違っていることを誰かが教えてくれることを願っています。ミニファイルを次に示します。
from tkinter import *
master = Tk()
Label(master, text="Input: ").grid(row=0, sticky=W)
entry = Entry(master)
entry.grid(row=0, column=1)
content = entry.get()
print(content) # does not work
mainloop()
これにより、入力できるEntry
フィールドが得られますが、入力したデータに対しては何もできません。
最初はentry
が空なので、コードが機能しないと思われます。しかし、入力された入力データにアクセスするにはどうすればよいですか?
コマンドを実行するタイミングについて混乱しているように見えます。この例では、GUIが画面に表示される前にget
メソッドを呼び出しています(mainloop
を呼び出した後に発生します)。
get
メソッドを呼び出すボタンを追加してみてください。アプリケーションをクラスとして作成する場合、これははるかに簡単です。例えば:
import tkinter as tk
class SampleApp(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.entry = tk.Entry(self)
self.button = tk.Button(self, text="Get", command=self.on_button)
self.button.pack()
self.entry.pack()
def on_button(self):
print(self.entry.get())
app = SampleApp()
app.mainloop()
プログラムを実行し、入力ウィジェットに入力して、ボタンをクリックします。
厳密に必要ではない場合でも、StringVar
変数を使用することもできます。
v = StringVar()
e = Entry(master, textvariable=v)
e.pack()
v.set("a default value")
s = v.get()
詳細については、- このページ on effbot.org を参照してください。
クラスなしの簡単な例:
from tkinter import *
master = Tk()
# Create this method before you create the entry
def return_entry(en):
"""Gets and prints the content of the entry"""
content = entry.get()
print(content)
Label(master, text="Input: ").grid(row=0, sticky=W)
entry = Entry(master)
entry.grid(row=0, column=1)
# Connect the entry with the return button
entry.bind('<Return>', return_entry)
mainloop()
*
master = Tk()
entryb1 = StringVar
Label(master, text="Input: ").grid(row=0, sticky=W)
Entry(master, textvariable=entryb1).grid(row=1, column=1)
b1 = Button(master, text="continue", command=print_content)
b1.grid(row=2, column=1)
def print_content():
global entryb1
content = entryb1.get()
print(content)
master.mainloop()
あなたが間違ったことは、それをDefine関数の中に入れなかったので、あなたが設定したtextvariableで.get
関数を使用していなかったということです。