在Python / Tkinter中删除按钮几秒钟?

时间:2017-08-29 21:13:51

标签: python tkinter

我正在编写一个程序,用户将根据目标图像进行选择。我试图让程序删除选择按钮,并在重新选择选择选项之前等待2秒后更新目标图像。我有的代码似乎"禁用"单击按钮2秒钟,但不删除任何按钮。

from tkinter import *
import random

root = Tk()
root.geometry("500x500")


def click_b(event):
    btn_b.pack_forget()
    btn_c.pack_forget()
    new_a()
    root.update()
    root.after(2000, show_btns())


def click_c(event):
    btn_b.pack_forget()
    btn_c.pack_forget()
    new_a()
    root.update()
    root.after(2000, show_btns())


def new_a():
    k = random.randrange(1, 3)
    if k == 1:
        btn_a.configure(image=a1)
    elif k == 2:
        btn_a.configure(image=a2)


def show_btns():
    btn_b.pack(side=LEFT)
    btn_c.pack(side=RIGHT)

a1 = PhotoImage(file="A1.gif")
a2 = PhotoImage(file="A2.gif")
orange = PhotoImage(file="orange_btn.gif")
green = PhotoImage(file="yellowgreen_btn.gif")
btn_a = Button(root, image=a1)
btn_a.pack()

btn_b = Button(root, image=orange)
btn_b.bind('<Button-1>', click_b)
btn_b.pack(side=LEFT)

btn_c = Button(root, image=green)
btn_c.bind('<Button-1>', click_c)
btn_c.pack(side=RIGHT)

root.mainloop()

1 个答案:

答案 0 :(得分:0)

问题出在您的after()方法中。 您需要删除show_btns函数调用的括号,否则tkinter将无法正确运行此命令。如果你有一个没有参数的函数,你就不用()部分。

如果你有参数,那么你需要在after语句IE after(2000, some_func, arg1, arg2)中提供这些参数,或者使用lambda创建一个关闭函数来完成像after(2000, lambda: some_func(arg1, arg2))这样的工作。 lambda可能更复杂,但这是基本概念。

变化:

after(2000, show_btns())

要:

after(2000, show_btns)

只要您的图片路径正常,下面的代码就可以正常运行。

from tkinter import *
import random

root = Tk()
root.geometry("500x500")

def click_b(event):
    btn_b.pack_forget()
    btn_c.pack_forget()
    new_a()
    root.update()
    root.after(2000, show_btns)

def click_c(event):
    btn_b.pack_forget()
    btn_c.pack_forget()
    new_a()
    root.update()
    root.after(2000, show_btns)

def new_a():
    k = random.randrange(1, 3)
    if k == 1:
        btn_a.configure(image=a1)
    elif k == 2:
        btn_a.configure(image=a2)

def show_btns():
    btn_b.pack(side=LEFT)
    btn_c.pack(side=RIGHT)

a1 = PhotoImage(file="A1.gif")
a2 = PhotoImage(file="A2.gif")
orange = PhotoImage(file="orange_btn.gif")
green = PhotoImage(file="yellowgreen_btn.gif")
btn_a = Button(root, image=a1)
btn_a.pack()

btn_b = Button(root, image=orange)
btn_b.bind('<Button-1>', click_b)
btn_b.pack(side=LEFT)

btn_c = Button(root, image=green)
btn_c.bind('<Button-1>', click_c)
btn_c.pack(side=RIGHT)

root.mainloop()