【Python GUI 编程 04 : 事件循环 Event Loop】import tkinter as tkfrom tkinter.messagebox import showerror,showinfo, showwarningfrom tkinter import ttk# 定义开始事件函数def start:btn.configure(text="Stop!", command=stop) # 将按钮功能重新绑定为停止事件函数lbl["text"] = "Redo ..."global interrupt # 定义一个flag全局变量interrupt=Falseroot.after(1,step) # 主窗体1毫秒后执行step事件def stop:global interrupt # 同步全局变量interrupt = Truedef step(count=0):pb["value"] = countif interrupt: # 事件循环过程若interrupt为Trueresult(pb["value"]) # 调用result方法将进度条值传递到标签文本return # 停止当前循环root.after(100)#! 主程序100毫秒后执行下一行if count == 50:#! 循环停止条件result(pb["value"])btn.configure(text="Start!", command=start)returnlbl["text"] = f'Answer : {str(pb["value"])}'idx = root.after(1, lambda: step(count + 1)) # 主窗体1毫秒后再次运行回调函数step# print(idx)def result(value):# pb["value"]=0btn.configure(text="Continue!", command=continue_) # interrupt为True时变更按钮文本及绑定方法lbl["text"] = f"Answer {str(value)}" if value else "No Answer" # 传递代入参数到文本标签内容def continue_:global interrupt # 同步全局变量interrupt = Falsestep(pb["value"])btn.configure(text="Stop", command=stop)root = tk.Tk# root.geometry(f"{root.winfo_screenwidth}x{root.winfo_screenheight}")# root.state(newstate="zoomed") # 最大化窗体f = ttk.Frame(root, width=150); f.gridbtn = ttk.Button(f, text="Start!", command=start)btn.grid(column=1, row=0, padx=5, pady=5)lbl = ttk.Label(f, width=20, text="No Answer")lbl.grid(column=0, row=0, padx=5, pady=5, sticky="we")pb = ttk.Progressbar(f, orient=tk.HORIZONTAL, mode="determinate", maximum=50)pb.grid(column=0, row=1, padx=5, pady=5, columnspan=2, sticky="we")# root.after_idle(showinfo(title="notice",message="No Event In Queue"))root.mainloop
以上关于本文的内容,仅作参考!温馨提示:如遇专业性较强的问题(如:疾病、健康、理财等),还请咨询专业人士给予相关指导!
「辽宁龙网」www.liaoninglong.com小编还为您精选了以下内容,希望对您有所帮助:- 零基础如何入门软件编程?
- 如何自学成为程序员?
- 想做人工智能必须要用python吗?你怎么看?
- python编译器安装入门教程 cython如何配置编译器
- 怎么学编程语言最好?
- python迭代器和生成器的区别?
- 求助:新唐单片机无法ISP编程?
- 电脑编程软件哪个好,电脑编程软件推荐介绍
- 怎样理解Python迭代器和生成器?
- 40岁还能学编程吗?初中文化,零基础,我想修仙C+语言?