Почему виджет ярлыка tkinter Python не обновляется? - PullRequest
0 голосов
/ 10 ноября 2018
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)

1 Ответ

0 голосов
/ 10 ноября 2018

У вас есть 2 основные причины, по которым ваш ярлык (не текст) виджет не обновляется.

Причина 1. Вам необходимо обработать событие, которое передается в 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...