27

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

4

5 に答える 5

48

コマンドがいつ実行されるかについて混乱しているようです。あなたの例ではget、GUI が画面に表示される前にメソッドを呼び出しています (これは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()

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

于 2012-05-23T23:00:55.993 に答える
10

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

v = StringVar()

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

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

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

于 2012-05-23T20:17:18.817 に答える
3

クラスなしの簡単な例:

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()
于 2016-09-12T15:20:04.720 に答える
2

*

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

あなたが間違っていたのは、定義関数内に配置しなかったため、.get設定したテキスト変数で関数を使用していませんでした。

于 2016-03-02T21:15:20.293 に答える