簡體   English   中英

更改Tkinter標簽

[英]python - change tkinter label

以下腳本創建一個帶有文本標簽,退出按鈕和更改文本按鈕的tkinter窗口:

from tkinter import *
from tkinter import ttk

class Window(Frame):

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.master = master
        self.init_window()

    def init_window(self):
        test_label = Label(root, text="none").grid(row=0, column=0, sticky=W)

        change_text_btn = Button(root, text="change_text", command=self.set_label_text).grid(row=2, column=0, sticky=W)
        exit_btn = Button(root, text="Exit", command=self.client_exit).grid(row=2, column=1, sticky=W)

    def set_label_text(self):
        test_label.config(text='changed the value')

    def client_exit(self):
        exit()

if __name__ == '__main__':
    root = Tk()
    app = Window(root)
    root.mainloop()

單擊change_text_btn后,我得到一個NameError: name 'test_label' is not defined錯誤。 所以問題是, test_label中創建init_window()是不是從avaliable set_label_text()怎么一回事,因為范圍。 我如何解決它?

為了解決這個問題,您可以在test_label實例變量前加上self前綴,以使其成為實例變量。 除此之外,當您像這樣鏈接方法時,發生的事情是您將None分配給變量,因為grid()返回None而是將每個方法放在單獨的行中(這代表所有按鈕):

self.test_label = Label(root, text="none")
self.test_label.grid(row=0, column=0, sticky=W)

當然,稍后需要在set_label_text函數中使用self.test_label進行引用。

除此之外,我建議您擺脫from tkinter import * ,因為您不知道該導入的名稱。 它可以替換您先前導入的名稱,並且很難查看程序中的名稱。 使用import tkinter as tk代替。

暫無
暫無

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

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