2013-05-03 20 views
1

下面以菜單命令示例(將文本加載到文本字段中)生成一個Tkinter文本字段。 應該有一個標籤作爲顯示剛執行的命令的狀態行。所以當點擊「加載」時,我想要顯示「文件加載」。 我正在努力將self.status分成appmenu。原因:app必須先被呼叫(因爲self.text),但爲了self.statusapp,appmenu應該先被呼叫。沒有?請幫忙。 感謝預期。Python Tkinter:如何獲取有關菜單操作的狀態消息?

import Tkinter 
import tkFileDialog 

class App (object): 
    def __init__(self, master, status): 
    self.status = status 
    frame = Tkinter.Frame(master) 
    frame.pack(fill="both", expand=1) 
    self.text_field(frame) 
    self.status_line(frame) 

    def status_line (self, frame): 
    statusline = Tkinter.Label(frame, text = self.status) 
    statusline.pack() 

    def text_field(self, frame): 
    self.text = Tkinter.Text(frame) 
    self.text.pack(fill="both", expand=1) 

class App_Menu(object): 
    def __init__(self, master, text, status): 
    self.text = text 
    self.master = master 
    menubar = Tkinter.Menu(master) 
    self.menuBar = Tkinter.Menu(master) 
    master.config(menu=self.menuBar) 
    self.fillMenuBar(text) 

    def fillMenuBar(self, text): 
    self.menuFile = Tkinter.Menu(self.menuBar, tearoff=False) 
    self.menuFile.add_command(label="Open",command=self.load) 
    self.menuBar.add_cascade(label="File",menu=self.menuFile) 

    def load(self): 
    self.file=tkFileDialog.askopenfile() 
    self.text.delete(1.0, Tkinter.END) 
    if self.file: 
     self.text.insert(1.0,self.file.read()) 
     self.status = "file loaded" 

root = Tkinter.Tk() 
status = "status" 
app = App(root, status) 
appmenu = App_Menu(root, app.text, status) 
root.mainloop() 

回答

2

隨着self.status = ...,你分配一個新值實例變量,但它不會改變標籤的文本。爲此,您可以使用StringVar和set方法更改其值:

class App (object): 
    # ... 
    def status_line (self, frame): 
    statusline = Tkinter.Label(frame, textvariable = self.status) 
    statusline.pack() 
    # ... 

class App_Menu(object): 
    def __init__(self, master, text, status): 
    # ... 
    self.status = status 

    # ... 
    def load(self): 
    self.file=tkFileDialog.askopenfile() 
    self.text.delete(1.0, Tkinter.END) 
    if self.file: 
     self.text.insert(1.0,self.file.read()) 
     self.status.set("file loaded") 

root = Tkinter.Tk() 
status = Tkinter.StringVar(root) 
status.set("status")