我正在制作一个有4帧/页的投票系统,我使用它来筛选。按钮控制下一步的位置。
有一个outro页面应该有30秒的冷却时间;该按钮应该在重新启用后将用户发送到起始页面。
问题是,按钮仅在第一次运行时被给予冷却,其余时间被启用。 这个按钮存储在一个类中,所以有没有任何方法我可以在每次启动outro帧时重新初始化该类?
这是代码:
class outropage(Frame):
def __init__(self, parent, controller):
self.controller = controller
self.parent = parent
Frame.__init__(self, parent)
self.intro_img = ImageTk.PhotoImage(Image.open(
'outro.jpg').resize((1024, 705), Image.ANTIALIAS))
self.intro_img_label = Label(self, image=self.intro_img)
self.intro_img_label.place(x=0, y=0, relwidth=1, relheight=1)
show_startpage = ttk.Button(self, text='Retrurn to start page',
command=lambda: self.controller.show_frame(intropage), state='disabled')
show_startpage.pack(side=BOTTOM)
show_startpage.after((1000 * 30), lambda: show_startpage.config(state='enabled'))
更改框架的代码:
class VotingSystem(Tk):
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
self.state('zoom')
self.geometry('1020x700')
self.wm_title('Student Council Elections 2017-18')
icon = ImageTk.PhotoImage(Image.open(
'logo.ico'))
self.call('wm', 'iconphoto', self._w, icon)
# Program can now only be exited through task manager.
# self.protocol("WM_DELETE_WINDOW", self.__callback)
container = Frame(self)
container.pack(side=TOP, fill=BOTH, expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (intropage, Headboy, Headgirl, D_Headboy, D_Headgirl, outropage):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky='nsew')
self.show_frame(intropage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
@staticmethod
def __callback():
return
答案 0 :(得分:0)
假设您最初将callback
函数附加到按钮button
作为命令:
button = tk.Button(root, command=callback)
您可以修改callback
功能,以便在按下时禁用按钮,稍后使用after
方法重新启用它:
def callback():
original_operations()
button.config(state='disabled')
button.after(3000, lambda: button.config(state='active'))
现在,使用新的回调重新定义button
,就像您在第一时间所做的那样:
button = tk.Button(root, command=callback)
以下示例显示一个带有单个按钮的窗口,按下时会打印'voted'
,然后被禁用一秒钟,然后再启用。
def callback():
print("voted")
button.config(state='disabled')
button.after(1000, lambda: button.config(state='active'))
root = tk.Tk()
button = tk.Button(root, text="Vote", command=callback)
button.pack()
root.mainloop()