2016-05-20 5 views
1

の現在の値が表示されない:PythonのTkinterのエントリは、このコードを検討textvariable

from tkinter import * 
from tkinter.ttk import * 

tk=Tk() 

def sub(): 
    var=StringVar(value='default value') 

    def f(): pass 

    Entry(tk,textvariable=var).pack() 
    Button(tk,text='OK',command=f).pack() 

sub() 
mainloop() 

我々はvarの値がエントリに表示されて期待を、実際にそれはしていません。

nothing in the entry

奇妙なことは、私は、ボタンのコールバック関数で声明var.get()を置けば、varの値がつくれということです。

the value appeared

バグがPythonでのローカル変数最適化のいくつかの種類によって引き起こされるということですか? textvariableの値が常にエントリに表示されるようにするにはどうすればよいですか?

貧しい私の英語を教えてください。

+0

あり、この問題を解決するには、ですが、あなたは、 'StringVar'を使用して_not_検討する必要があります。彼らはめったに必要ありません。ウィジェット自体のメソッドを使用して値を取得および設定できます。 –

答えて

2

ガベージコレクションが行われています。

あなただけの機能を取り除くことができます

(あなたも、このような巣機能しません)

from tkinter import * 
from tkinter.ttk import * 

tk=Tk() 

var=StringVar(value="default value") 
Entry(tk, textvariable=var).pack() 
Button(tk,text='OK').pack() 

mainloop() 

それとも、あなたは機能を維持したい場合は... TKの属性としてSTRINGVARを設定したり、それをグローバルにする。それはグローバル作る

from tkinter import * 
from tkinter.ttk import * 

tk=Tk() 
var = StringVar(value="Default value") 

def sub(): 

    Entry(tk, textvariable=var).pack() 
    Button(tk,text='OK').pack() 

sub() 
mainloop() 

TKの属性として:

from tkinter import * 
from tkinter.ttk import * 

tk=Tk() 

def sub(): 

    tk.var = StringVar(value="Default value") 
    Entry(tk, textvariable=tk.var).pack() 
    Button(tk,text='OK').pack() 

sub() 
mainloop() 
関連する問題