Почему мой лейбл не может сказать "Приключение имени персонажа-" - PullRequest
0 голосов
/ 05 октября 2019

У меня есть функция, которая возвращает пользовательский ввод. Однако я не могу использовать этот пользовательский ввод в предложении. После первой пары комментариев я понимаю, что это возможно из-за того, что моя метка была создана до того, как пользователь мог ввести какое-либо значение.

Я не уверен, как это исправить. Любая помощь будет принята с благодарностью.

class NamePage(tk.Frame):
    def __init__(self, parent, controller):
        self.controller = controller
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text="Please type the 
                         name you want your character to have",
                         width=127, height=30,
                         font=font_remaining, bd=1,
                         relief="solid", anchor=CENTER)
        label.grid(row=1, column=1, pady=10, padx=10)
        button_continue = tk.Button(self, width=40, height=3, bd=1 
                                    relief="solid",
                                    font=font_button, text="Continue", 
                                    command=lambda: value())
        button_continue.place(x=425, y=500)
        entry1 = tk.Entry(self, 
                           textvariable=self.controller.shared_data["name"])
        entry1.place(x=425, y=400)
        entry1.config(width=67)

        def value():
            value1 = self.controller.shared_data["name"].get()
            print(value1)
            controller.show_frame(TitlePage)

class TitlePage(tk.Frame):
    def __init__(self, parent, controller):
        self.controller = controller
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, bg=background_options, text="The Adventure of 
                         " 
                         + 
                         self.value_name(), width=127, height=30,
                         font=font_title, bd=1,
                         relief="solid", anchor=CENTER)
        label.grid(row=1, column=1, pady=10, padx=10)


    def value_name(self):
        value2 = self.controller.shared_data["name"].get()
        input_name = value2
        print(input_name)
        return input_name

app = firstwindow()
app.mainloop()

пользовательские данные Джон

Ожидаемые результаты = Приключение Иоанна

фактические результаты = Приключение

1 Ответ

0 голосов
/ 05 октября 2019

Самое простое решение - сделать StringVar для вашего ярлыка в TitlePage. Затем, когда вы переключаете кадры после начального ввода, установите новую метку напрямую:

class NamePage(tk.Frame):
    def __init__(self, parent, controller):
        ...
        def value():
            value1 = self.controller.shared_data["name"].get()
            controller.frames[TitlePage].var.set(f"The Adventure of {value1}") #set new value here
            controller.show_frame(TitlePage)

class TitlePage(tk.Frame):
    def __init__(self, parent, controller):
        self.controller = controller
        tk.Frame.__init__(self, parent)
        self.var = StringVar() #create StringVar here
        label = tk.Label(self, bg=background_options, textvariable=self.var, #assign textvariable
                         width=127, height=30, font=font_title, bd=1,
                         relief="solid", anchor=CENTER)
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...