- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个循环,当通过单击按钮更改变量时启动和暂停,并且停止按钮完全停止循环。我可以使用分配的按钮开始/暂停和停止循环。在该循环中,我需要一个倒计时器。当主循环暂停时,倒计时器还需要暂停,跟上原来的位置,并在主循环取消暂停时重新启动,但一切都卡住,直到倒计时器完成。
class MYmain(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.title_font = tkfont.Font(family='Helvetica', size=18, weight="bold", slant="italic")
self.geometry("800x600+0+0")
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
self.frames["mainframe"] = mainframe(parent=container, controller=self)
self.frames["mainframe"].grid(row=0, column=0, sticky="nsew")
self.show_frame("mainframe")
def show_frame(self, page_name):
'''Show a frame for the given page name'''
frame = self.frames[page_name]
frame.place(x=0, y=368, width=800, height=232)
frame.tkraise()
def shutdown(self):
self.destroy()
def get_page(self, page_class):
return self.frames[page_class]
if __name__ == "__main__":
app = MYmain()
app.mainloop()
#I also have my main form
import tkinter as tk # python 3
import sys
import time
class mainframe(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
self.running = False
self.aboutToQuit = False
self.someVar = 0
label = tk.Label(self, text="Handheld page", font=controller.title_font)
label.pack(side="top", fill="x", pady=10)
font18 = "-family {Segoe UI} -size 18"
frame_top_left = tk.Frame(self)
frame_top_left.place(relx=0.0, rely=0.0, relheight=0.363, relwidth=0.456)
frame_top_left.configure(relief='groove')
frame_top_left.configure(borderwidth="2")
frame_top_left.configure(relief='groove')
frame_top_left.configure(background="#3f53d8")
frame_top_left.configure(width=365)
frame_cmd = tk.Frame(self)
frame_cmd.place(relx=0.456, rely=0.0, relheight=0.363, relwidth=0.544)
frame_cmd.configure(relief='groove')
frame_cmd.configure(borderwidth="2")
frame_cmd.configure(relief='groove')
frame_cmd.configure(background="#31d80f")
frame_cmd.configure(width=445)
frame_score = tk.Frame(self)
frame_score.place(relx=0.0, rely=0.242, relheight=0.138, relwidth=1.0)
frame_score.configure(relief='groove')
frame_score.configure(borderwidth="2")
frame_score.configure(relief='groove')
frame_score.configure(background="#d81838")
frame_score.configure(width=800)
frame_bat = tk.Frame(self)
frame_bat.place(relx=0.0, rely=0.379, relheight=0.495, relwidth=0.256)
frame_bat.configure(relief='groove')
frame_bat.configure(borderwidth="2")
frame_bat.configure(relief='groove')
frame_bat.configure(background="#3f53d8")
frame_bat.configure(width=125)
frame5 = tk.Frame(self)
frame5.place(relx=0.256, rely=0.38, relheight=0.495, relwidth=0.744)
frame5.configure(relief='groove')
frame5.configure(borderwidth="2")
frame5.configure(background="#ffffff")
frame5.configure(width=125)
button1 = tk.Button(frame5)
button1.place(relx=0.444, rely=0.296, height=42, width=98)
button1.configure(activebackground="#ececec")
button1.configure(activeforeground="#000000")
button1.configure(background="#d9d9d9")
button1.configure(disabledforeground="#a3a3a3")
button1.configure(foreground="#000000")
button1.configure(highlightbackground="#d9d9d9")
button1.configure(highlightcolor="black")
button1.configure(pady="0")
button1.configure(text='''Quit''')
button1.configure(width=98)
button1.configure(command=self.quitme)
buttont1 = tk.Button(frame5, text="stop comm loop",
command=self.toggledoquit)
buttont1.place(relx=0.444, rely=0.496, height=42, width=90)
buttontt1 = tk.Button(frame5, text="set pause (attr)",
command=self.togglesetattr)
buttontt1.place(relx=0.244, rely=0.496, height=42, width=90)
frame6 = tk.Frame(self)
frame6.place(relx=0.0, rely=0.867, relheight=0.142, relwidth=1.0)
frame6.configure(relief='groove')
frame6.configure(borderwidth="2")
frame6.configure(relief='groove')
frame6.configure(background="#ced83c")
frame6.configure(width=125)
self._attr = False
self._doquit = False
def doloop(self):
#print(self.aboutToQuit)
while not self.aboutToQuit:
self.controller.update() # always process new events
if self.running:
# do stuff
print(str(self.someVar) + " Send")
## THE ISSUE IS HERE
## t=15
## while t > 0:
## if self.running:
## print(t)
## t -= 1
## time.sleep(.1)
## else:
## time.sleep(.1)
time.sleep(1)
self.someVar += 1
else: # If paused, don't do anything
time.sleep(.1)
def quitme(self):
self.toggledoquit()
self.controller.shutdown()
def togglesetattr(self):
if self._attr == False:
self.attr=True
else:
self.attr=False
def toggledoquit(self):
self.doquit = True
@property
def attr(self):
return self._attr
@attr.setter
def attr(self, value):
self._attr = self.attr
self.running = not (self.running)
if value == True:
self.doloop()
else:
return
@property
def doquit(self):
return self._doquit
@doquit.setter
def doquit(self, value):
self.running = False
self.aboutToQuit = not (self.aboutToQuit)
self.someVar=0
def stopme(self):
if self._attr==True:
self.togglesetattr
self.aboutToQuit = not (self.aboutToQuit)
self.someVar=0
如果我注释掉上面的代码,它可以正常工作,但是一旦我取消注释并重新添加倒计时代码,它就会卡住,直到倒计时完成,然后我才能卡住或停止主循环。当主循环停止时,它也需要完全停止。计时器最终将作为标签文本放置。
我添加:
if self.someVar == 5:
self.toggledoquit()
print(str(self.someVar) + " Send")
self.time_var.set(15)
self.countdown()
到##issue is here区域,然后添加def:
def countdown(self):
temp = int(self.time_var.get())
temp -= 1
self.time_var.set(temp)
if ((temp >= 0) and (self.running==True)):
print(self.time_var.get())
self.after(1000, self.countdown)
我的全局标志是 self.running (适用于 doloop)
最佳答案
您的问题是您正在使用time.sleep()
。 Tkinter 在循环内运行,因此调用 sleep 等函数会卡住循环。要解决这个问题,请使用 tkinters after 函数。这是一个基本的倒计时器。
import tkinter as tk
root = tk.Tk()
time_var = tk.StringVar(root, value=10)
flag = False
def countdown():
global flag
temp = int(time_var.get())
temp -= 1
time_var.set(temp)
if temp >= 0 and not flag:
root.after(1000, countdown) # This is where the function is called again. Time is in miliseconds
def stop_timer():
global flag
flag = True
def start_timer():
global flag
flag = False
countdown()
tk.Button(root, text='start', command=start_timer).pack(side='bottom')
tk.Button(root, text='pause', command=stop_timer).pack(side='bottom')
time = tk.Label(root, textvariable=time_var)
time.pack()
root.mainloop()
现在您可以对此进行很大改进。但它给出了如何使用 tkinter 同时管理事物的基本概念。
关于python - 在 while 语句内暂停倒计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57401221/
我想在 android 中扫描黑底白字条码。我使用过 zxing,它允许我只扫描白底黑字。我如何扫描和倒置条形码或使用哪个库?感谢您的帮助。 最佳答案 如果您仍在引用 journeyapps 嵌入式
所以我在 youtube 上观看了一些介绍性类(class)以学习 OpenGL 的基础知识并学习了诸如制作三角形和简单相机类等内容。我一直想尝试制作体素引擎,这显然是第一个我想做的是一个我最终可以复
这个问题在这里已经有了答案: Div with cut out edges, border and transparent background (6 个答案) 关闭 8 年前。
我有一张图片,我正在查看用 HTML 创建的小型网站的基本定制。 我知道您可以对图像进行倒 Angular 处理,如 this question here 中所示,这给出了 45 度切割。 我希望每个
我必须在 iOS 上创建一个自定义形状(倒 T)边框的 Uiview。我附上下面的截图。我进行了很多研究,找到了一种使用 here 中的 UIBezierPath 的方法. 但我不知道如何将我的 Vi
我是一名优秀的程序员,十分优秀!