web-dev-qa-db-ja.com

Python Tkinter Entry get()

Tkinterのエントリウィジェットを使用しようとしています。入力した値を返すという非常に基本的なことを実行することはできません。
このような単純なスクリプトが何も返さない理由を誰かが知っていますか?私はたくさんの組み合わせを試し、さまざまなアイデアを検討しました。
このスクリプトは実行されますが、エントリは出力されません。

from Tkinter import *
root = Tk()
E1 = Entry(root)
E1.pack()
entry = E1.get()
root.mainloop()
print "Entered text:", entry

とてもシンプルなようです。

編集:他の誰かがこの問題に遭遇して理解できない場合に備えて、これが私のために働いた結果です。入力ウィンドウにボタンを追加しました。ボタンのコマンドはウィンドウを閉じ、get()関数を実行します。

from Tkinter import *
def close_window():
    global entry
    entry = E.get()
    root.destroy()

root = Tk()
E = tk.Entry(root)
E.pack(anchor = CENTER)
B = Button(root, text = "OK", command = close_window)
B.pack(anchor = S)
root.mainloop()

そして、それは望ましい値を返しました。

4
Bird

最初の問題は、entry = E1.get()でのgetの呼び出しがプログラムの開始前でも行われるため、明らかにentryが空の文字列を指していることです。

最終的な2番目の問題は、メインループが終了した後、つまりtkinterアプリケーションを閉じた後にのみテキストが印刷されることです。

プログラムの実行中にEntryウィジェットの内容を印刷する場合は、コールバックをスケジュールする必要があります。たとえば、次のように<Return>キーの押下を聞くことができます。

import Tkinter as tk


def on_change(e):
    print e.widget.get()

root = tk.Tk()

e = tk.Entry(root)
e.pack()    
# Calling on_change when you press the return key
e.bind("<Return>", on_change)  

root.mainloop()
4
nbro
from tkinter import *
import tkinter as tk
root =tk.Tk()
mystring =tk.StringVar(root)
def getvalue():
    print(mystring.get())
e1 = Entry(root,textvariable = mystring,width=100,fg="blue",bd=3,selectbackground='Violet').pack()
button1 = tk.Button(root, 
                text='Submit', 
                fg='White', 
                bg= 'dark green',height = 1, width = 10,command=getvalue).pack()

root.mainloop()
2