Как получить кнопку на странице обновления tkinter и повторно вызвать random.choice? - PullRequest
0 голосов
/ 01 марта 2019

Я уже посмотрел на многие вопросы и ответы:

Никто не обладает необходимой информацией или не может ответить на мой вопрос.

Вот класс в моем приложении.Это окно вызывается, когда пользователь нажимает кнопку «Мексиканская» в качестве выбора блюд на предыдущей странице.На этой странице пользователю предоставляется 3 варианта:

  1. ДА - пользователю нравится выбор ресторана, и приложение закрывается
  2. ПОПРОБУЙТЕ - пользователь все еще хочет мексиканскую еду, но не выбордано
  3. Я больше не хочу мексиканца - говорит само за себя и возвращается к выбору типа ресторана

Мой вопрос касается опции «ПОПРОБУЙТЕ СНОВА».Я пробовал Tk.update, создавая функцию обновления, вызовы функций lamba, например command=lambda: controller.show_frame(MexicanRest), но ничто не обновляет текущую страницу и не позволяет снова вызвать команду mex_choice = random.choice(mexican_rest) и выбрать новый ресторан из списка mexican_restопределены.

Вы увидите, где я отметил "# ЧТО ЗДЕСЬ ОБНОВЛЯЕТСЯ?" Пожалуйста, сообщите ...

class MexicanRest(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text="Mexican Restaurant", 
                        font=('century gothic', 24))
        label.pack(pady=10, padx=10)

        mex_choice = random.choice(mexican_rest)

        label = tk.Label(self, 
                        text="How does %s sound? " %mex_choice, 
                        bg='yellow', 
                        font=('times', 24), 
                        fg='red')
        label.pack()

        button1 = tk.Button(self, 
                        text='YES', 
                        width=20, 
                        command=quit)
        button1.pack(fill=tk.BOTH)

        button2 = tk.Button(self, 
                        text='TRY AGAIN', 
                        width=20, 
                        command=self.refresh) #WHAT GOES HERE TO REFRESH???
        button2.pack(fill=tk.BOTH)

        button3 = tk.Button(self, 
                        text='I Don\'t Want Mexican Anymore', 
                        #width=20, 
                        command=lambda: controller.show_frame(StartPage))
        button3.pack(fill=tk.BOTH)

    def refresh(self):
        MexicanRest.update(self)

1 Ответ

0 голосов
/ 01 марта 2019

Вам нужно сделать две вещи:

  1. Сделать так, чтобы можно было получить доступ к виджетам, которые должны быть обновлены (например, сделать их атрибутами экземпляра)
  2. Написать функциюперенастроить эти виджеты

В вашем случае первым шагом является создание атрибута для метки, которую вы хотите обновить.Например:

self.choice_label = tk.Label(self, 
                text="How does %s sound? " %mex_choice, 
                bg='yellow', 
                font=('times', 24), 
                fg='red')
self.choice_label.pack()

Затем создайте функцию, которая обновляет этот ярлык:

def refresh(self):
    mex_choice = random.choice(mexican_rest)
    self.choice_label.configure(text="How does %s sound? " %mex_choice)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...