1

小さなアプリ (Win 7/64 では Python 2.7.3/32) を切り替えて ttk を使用していますが、ttk.Entry を tk.Entry のように機能させるのに問題があります。ttk.Entry の内容を設定しても、表示されたエントリ ボックスが更新されません。

import Tkinter as tk
import ttk

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        part_num = '1234'
        newPNVar = tk.StringVar()
        newPN = ttk.Entry(self, width=13, textvariable=newPNVar)
        newPNVar.set(part_num)
        newPN.pack()
        #newPN.insert(0, part_num)  also didn't work

        print newPNVar.get()


app = SampleApp()
app.mainloop()

ttk.Entry を tk.Entry に置き換えて例を実行すると、エントリ ボックスに 1234 が表示されますが、ttk.Entry の場合は表示されません。それらを同じように動作させるにはどうすればよいですか?

4

1 に答える 1

2

ttkとtkはテキスト変数を少し異なって保持しているように見えます。根本的な原因はnewPNVar、参照を保持していないためにガベージコレクションが収集されていることであると思われます。これは影響を与えないようですが、影響をtk.Entry及ぼしttk.Entryます。

手っ取り早い解決策は、newPNVar(例:)への参照を保持するself.newPNVarことです。これは、この動作の違いに関係なく、おそらく賢明なことです。

これはWindowsで私のために働きます:

import Tkinter as tk
import ttk

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        part_num = '1234'
        self.newPNVar = tk.StringVar()
        newPN = ttk.Entry(self, width=13, textvariable=self.newPNVar)
        self.newPNVar.set(part_num)
        newPN.pack()
        #newPN.insert(0, part_num)  also didn't work

        print self.newPNVar.get()


app = SampleApp()
app.mainloop()
于 2012-09-11T22:15:41.147 に答える