web-dev-qa-db-ja.com

Tkinter Entryのget関数が何も返さないのはなぜですか?

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が空なので、コードが機能しないと思われます。しかし、入力された入力データにアクセスするにはどうすればよいですか?

19
CodingCat

コマンドを実行するタイミングについて混乱しているように見えます。この例では、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()

プログラムを実行し、入力ウィジェットに入力して、ボタンをクリックします。

33
Bryan Oakley

厳密に必要ではない場合でも、StringVar変数を使用することもできます。

v = StringVar()

e = Entry(master, textvariable=v)
e.pack()

v.set("a default value")
s = v.get()

詳細については、- このページ on effbot.org を参照してください。

8
zortacon

クラスなしの簡単な例:

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

*

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関数を使用していなかったということです。

2
rodude123