2012-05-21 23 views
2

來自example_script.py的小部件tk.Entry不保存值'textvariable'字段。如何正確的從導入的腳本(tkinter,python)打開新窗口?

example_script.py:

import Tkinter as tk 

class App(tk.Frame): 
    def __init__(self, master, text): 
     tk.Frame.__init__(self, master) 
     textVar = tk.StringVar() 
     textVar.set(text) 
     entryVar = tk.Entry(self, textvariable=textVar).pack() 
     self.pack() 

def main(): 
    root = tk.Tk() 
    text = ['text1', 'text2', 'text3'] 
    for i in text: 
     App(root, i) 
    root.mainloop() 

main_script.py:

import Tkinter import example_script as ex 

if __name__ == '__main__': 
    root = Tkinter.Tk() 
    Tkinter.Button(root, text='press', command=lambda: ex.main()).pack() 
    root.mainloop() 

如果更改行 'entryVar = tk.Entry(個體,textvariable = textVar).pack()' 來

entryVar = tk.Entry(self) 
entryVar.pack() 
entryVar.insert(0, text) 

字段的值被更新。爲什麼?

如何從導入的腳本中正確打開新窗口? Tkinter.Toplevel()不適合。現在我使用subprocess.Popen。

回答

0

您不能在一個程序中創建Tk類的兩個實例。 Tkinter的設計並非如此。

+0

我知道。因此,這種不同的行爲很有趣。我的故事:有一個腳本不能改變。該腳本創建一個窗口。現在我使用模塊子進程(Popen)從其他窗口(按下按鈕時)調用它。有其他方法嗎? – vostbur

+0

你在評論中提出的是一個完全不同的問題。如果您使用popen來產生另一個進程,那麼與原始問題完全不同。 –

+0

對不起。大概應該被分成兩個問題。謝謝。 – vostbur

1

當你做entryVar = tk.Entry(self).pack()時,entryVar將被設置爲None,因爲那是pack()返回的值。當您單獨撥打pack時,entryVar會被設置爲您的想法。

+0

不是這個問題。如果tk.Entry(self,textvariable = textVar).pack()或entryVar = tk.Entry(self,textvariable = textVar); entryVar.pack()text'text1','text2'等不顯示。如果顯示使用entryVar.insert(0,text)文本。 – vostbur

相關問題