如何在tkinter刷新页面中具有一个按钮并重新调用random.choice?

时间:2019-03-01 19:42:16

标签: python-3.x tkinter

我已经查看了许多问题和答案:

没有人提供必要的信息或能够回答我的问题。

这是我的应用程序中的一门课。当用户按下“墨西哥”按钮作为上一页中的食物选择时,将调用此窗口。在此页面上,向用户显示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 :(得分:1)

您需要做两件事:

  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)