tkinter中gui按钮中的If-else语句



我遇到的问题是,我希望这段代码以这样的方式运行,即当我按下按钮时,它只执行命令中的操作,但它也连续运行def ad((函数。我该如何解决这个问题,即它只在我按下时运行按钮函数,否则def ad(只在按下按钮时停止运行。

root=Tk()
root.geometry('1600x900')
root.configure(bg='black')
def clicker():
global pop1
pop1=Toplevel(root)
pop1.geometry('1600x900')

global pic
pic=PhotoImage(file='location.png')
label_pop = Label(pop1, image=pic)
label_pop.grid()
pop1.overrideredirect(1)
pop1.after(5000, lambda: pop1.destroy())
btn1 =Button(root, image=location, borderwidth=0, bg='black', command=clicker)
btn1.pack(pady=10)
def ad():
global pop
pop = Toplevel(root)
pop.geometry('1600x900')
pop.overrideredirect(1)
pic = PhotoImage(file=next(imagelist))  # get next image using next()
label_pop = Label(pop, image=pic)
label_pop.grid()
label_pop.image = pic  # save reference of image to avoid garbage collection
root.after(5000, pop.destroy)
root.after(15000, ad)

root.after(10000, ad)
root.overrideredirect(1)
root.mainloop()

这里有一个快速示例,展示了如何"暂停";CCD_ 1呼叫。你要做的是测量在按下按钮之前已经过去了多少时间,然后从释放之后和释放时应该安排的时间中减去这个时间,用剩下的时间安排另一个after。所以现在,当你按下按钮时,它会取消前一次通话,并在释放按钮时安排一个剩余时间的新通话:

import tkinter as tk
import time

DELAY_MS = 5000
time_ms, last = DELAY_MS, 0
after_id = None

def window():
global after_id, last, time_ms
time_ms = DELAY_MS
top = tk.Toplevel()
top.attributes('-topmost', True)
root.after(2000, top.destroy)
after_id = root.after(DELAY_MS, window)
last = time.perf_counter() * 1000

def pause_after():
global time_ms
if after_id is None:
return
root.after_cancel(after_id)
passed_time = time.perf_counter() * 1000 - last
left = int(time_ms - passed_time)
if left > 0:
time_ms = left
print(time_ms)

def unpause_after():
global after_id, last
if after_id is None:
return
after_id = root.after(time_ms, window)
last = time.perf_counter() * 1000

root = tk.Tk()
root.geometry('500x400')
btn = tk.Button(root, text='Pause', command=unpause_after)
btn.bind('<Button-1>', lambda _: pause_after())
btn.pack()
root.after(1000, window)
root.mainloop()

最新更新