为什么pythontkinter标签小部件不更新?

2024-09-19 23:27:05 发布

您现在位置:Python中文网/ 问答频道 /正文

class First_Frame(Frame):
    def __init__(self,master):
        super().__init__(master)
        self.grid()
        self.widgets()

    def widgets(self):
        self.commandent1=StringVar()
        self.commandent1.set("tutaj bedzie sie pokazywal aktualny status")
        self.img=Image.open("database.XPM","r")
        self.image_true=ImageTk.PhotoImage(self.img)
        self.label=Label(self,image=self.image_true).grid()
        self.label2=Label(self,text="twoje gui uzytkownika").grid()
        self.widgets_2()

    def widgets_2(self):
        self.status_text=Label(self,text=self.commandent1.get())
        self.entry1=Entry(self)
        self.entry1.bind("<Return>",self.update_status)
        self.entry1.grid()
        self.status_text.grid()
    def update_status(self):
        self.x=self.entry1.get()
        self.commandent1.set(self.x)

Tags: textimageselfmasterimginitdefstatus
1条回答
网友
1楼 · 发布于 2024-09-19 23:27:05

您的标签(不是文本)小部件没有更新有两个主要原因。你知道吗

原因一。您需要处理从绑定传递到update_status的事件。为此,只需添加event或任何您真正想要的参数名。我只是为了可读性而使用event。你知道吗

def update_status(self, event):

原因2。您需要这样做,而这里不太明显的原因是您在标签小部件上使用StringVar()的方式。在这里,您将只分配StringVar()的当前文本值一次,而不再分配。要将StringVar()与标签小部件一起正确使用,您需要将StringVar()分配给textvariable参数,而不是text参数。你知道吗

像这样:

Label(self,textvariable=self.commandent1).grid()

注意我去掉了代码的图像部分,因为它与问题无关。您的最终代码应该如下所示:

from tkinter import *

class First_Frame(Frame):
    def __init__(self, master):
        super().__init__()
        self.grid()
        self.widgets()

    def widgets(self):
        self.commandent1 = StringVar()
        self.commandent1.set("tutaj bedzie sie pokazywal aktualny status")
        Label(self,text="twoje gui uzytkownika").grid()
        self.widgets_2()

    def widgets_2(self):
        self.entry1 = Entry(self)
        self.entry1.bind("<Return>", self.update_status)
        self.entry1.grid()
        Label(self,textvariable=self.commandent1).grid()

    def update_status(self, event):
        self.commandent1.set(self.entry1.get())


root = Tk()
First_Frame(root)
root.mainloop()

相关问题 更多 >