簡體   English   中英

Python Tkinter更改變量標簽狀態和狀態欄

[英]Python tkinter change variable label state and statusbar

我在這里確實有一點問題。 這是關於TKinter中標簽變量的交換。 我的程序不會刷新該值。

class Application(Frame):
    def __init__(self,parent,**kw):
         Frame.__init__(self,parent,**kw)
         self.x = None
         self.directory = None
         self.autostate = None
         self.state = "closed"
         self.GUI2()

     def state(self):
         #change states
         self.stateVar="open"
         self.statusbar = "Status: Opening gate..."

         #update tkinter
         self.group.update_idletasks()
         self.w.update_idletasks()

     def GUI2(self):

         self.statusbar = "Status:..."

         # menu left
         self.menu_left = tk.Frame(root, width=150, bg="red", bd=1, relief=RIDGE)
         self.menu_left_upper = tk.Frame(self.menu_left, width=300, height=900, bg="#C0C0C0")
         self.menu_left_lower = tk.Frame(self.menu_left, width=300, bd=1, relief=GROOVE)

         self.label1 = tk.Label(self.menu_left_lower, relief=FLAT, bg="blue" )
         self.button1 = Button(self.menu_left_lower, text="RUN")
         self.test = tk.Label(self.menu_left_upper, text="info", bg="#C0C0C0")


         self.menu_left_upper.pack(side="top", fill="both", expand=TRUE)
         self.menu_left_lower.pack(side="top", fill="both", expand=FALSE)

         # right area
         self.some_title_frame = tk.Frame(root, bg="#dfdfdf", bd=1, relief=RIDGE)
         self.some_title = tk.Label(self.some_title_frame, text="some title", bg="#dfdfdf")
         self.text_area = Listbox(root, width=50, height=10, background="#ffffff", relief=GROOVE)

         #Label and Button
         self.group = LabelFrame(self.menu_left_upper, text="info", height=70)
         self.group.pack(side="top", fill="both", expand=TRUE)
         Button(self.menu_left_lower, text='Press', command=self.state).pack(side="bottom")
         self.w = Label(self.group, text='State='+self.stateVar)    #text printed!
         self.w.pack(expand=TRUE)

         # status bar
         self.status_frame = tk.Frame(root)
         self.status = tk.Label(self.status_frame, text=self.statusbar, bd=1, relief=SUNKEN)    #statusbar printed here
         self.status.pack(fill="both", expand=True)
         self.menu_left.grid(row=0, column=0, rowspan=2, sticky="nsew")
         self.status_frame.grid(row=2, column=0, columnspan=2, sticky="ew")
         root.grid_rowconfigure(1, weight=1)
         root.grid_columnconfigure(1, weight=1)

 #Starts the main loop and causes the class to interact with the init function
 if __name__ == '__main__':
    root = Tk()
    root.title("simulation")
    app = Application(root)
    app.grid()
    root.mainloop()

在這里您可以看到整個代碼。

重要的是檢查#tab1中是否有按鈕。 此按鈕指的是def狀態(自身):此按鈕需要更改標簽和狀態欄。 在程序中我將它們添加到self.wself.status中,並添加了一個#text打印內容! 下線之后。

錯誤在於Label參數中:如果輸入變量已更新,則不會更新tekst參數。 您應該將stateVar分配給Labeltextvariable關鍵字參數,並且不使用text參數。

下面是一個示例程序,可以幫助您弄清楚如何更改標簽的文本。 他們的關鍵是創建一個StringVar並將標簽指向此標簽,以便在StringVar出現時更新標簽。

from Tkinter import *

class Application(Frame):
    def __init__(self,parent,**kw):
        Frame.__init__(self,parent,**kw)
        # Create a String variable to store our status string
        self.stateVar = StringVar()
        self.stateVar.set("Initial Value")

        # Create a label to display the status
        self.label1 = Label(textvariable=self.stateVar)
        self.label1.grid()

        # Create a button which will change the status
        self.button = Button(text="Press me", command=self.change)
        self.button.grid()

    def change(self):
        """Called when the button is pressed"""
        self.stateVar.set('You pressed the button')


if __name__ == '__main__':
    root = Tk()
    root.title("simulation")
    app = Application(root)
    app.grid()
    root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM