【问题标题】:Python 3, Update label in Tkinter from different function?Python 3,从不同的函数更新 Tkinter 中的标签?
【发布时间】:2018-04-18 23:46:00
【问题描述】:

所以我试图在 Tkinter 中制作一个 GUI,并更新以前在 main 函数中制作的标签,并使用按钮单击来触发更改。但是,无论我尝试什么,包括在同一个网格点上放置一个新标签似乎都有效。

我该怎么办?

from tkinter import *

class MyFirstGUI:
    def __init__(self, master):
        self.master = master
        master.title("Login")
        Label(master, text="E-Mail Address:").grid(row=0)
        Label(master, text="Password:").grid(row=1)
        Label(master, text="UserID:").grid(row=2)
        e1 = Entry(master)
        e2 = Entry(master)
        e3 = Entry(master)
        e1.grid(row=0, column=1)
        e2.grid(row=1, column=1)
        e3.grid(row=2, column=1)
        b1 = Button(text ="Login!", command=self.test)
        b1.grid(row=3, column=1)
        Label(master, text="Status: ").grid(row=4, column=0)
        Label(master, text="Boop!").grid(row=5, column=0)   

    def test(self):
        # I want to change the label named Boop in this function when button is pressed.
        # Target word is "Beep!"

root = Tk()
my_gui = MyFirstGUI(root)
root.mainloop()

【问题讨论】:

    标签: python python-3.x user-interface tkinter label


    【解决方案1】:

    要更改任何内容,您必须保存对象。在类中,您需要给它一个以“self.”开头的名称。

    from tkinter import *
    
    class MyFirstGUI:
        def __init__(self, master):
            self.master = master
            master.title("Login")
            Label(master, text="E-Mail Address:").grid(row=0)
            Label(master, text="Password:").grid(row=1)
            Label(master, text="UserID:").grid(row=2)
            e1 = Entry(master)
            e2 = Entry(master)
            e3 = Entry(master)
            e1.grid(row=0, column=1)
            e2.grid(row=1, column=1)
            e3.grid(row=2, column=1)
            b1 = Button(text ="Login!", command=self.test)
            b1.grid(row=3, column=1)
            Label(master, text="Status: ").grid(row=4, column=0)
            self.mylbl = Label(master, text="Boop!")
            self.mylbl.grid(row=5, column=0)
    
        def test(self):
            self.mylbl.config(text="Beep!")
    
    root = Tk()
    my_gui = MyFirstGUI(root)
    root.mainloop()
    

    请注意,我将初始化设置为 2 行而不是 1 行。如果您想稍后访问该对象,这非常重要。

    【讨论】:

    • 完美!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多