首页 > 其他分享 >关于tkinter-gui窗体中循环周期性执行某段代码的方法记录

关于tkinter-gui窗体中循环周期性执行某段代码的方法记录

时间:2022-10-06 22:33:16浏览次数:91  
标签:task tkinter 某段 mainloop gui 窗体 time root

最近笔者在写一个窗体程序时,希望能每隔1秒,周期性的定时刷新文本框中的内容,但最后发现很难实现

出现各种各样的问题,最后通过查询大量的资料,才找到原因和解决方法

为了阐述清楚这个现象,笔者先用一段简单的代码进行说明,如下一段tkinter-窗体程序代码:

from tkinter import *
import time

root = Tk()
root.title("Author:QQ-5201351")

def task():
    print(time.time())

while True:
    task()
    time.sleep(1)

root.mainloop()

从代码上看,笔者是希望一个窗体,然后能定时,周期性的执行task函数中代码,但实际运行时,确实能每一秒输出当前的时间

但是整个窗体却不显示出来,那么就说明一点,程序由上而下执行,始终为未曾到root.mainloop()这一条,所以才没有显示出窗体

那么要不将while True那一段代码放到root.mainloop() 这一条语句的后面?试试

from tkinter import *
import time

root = Tk()
root.title("Author:QQ-5201351")

def task():
    print(time.time())

root.mainloop()

while True:
    task()
    time.sleep(1)

这时又出现了一个现象,窗体是显示了,但是就是不会执行到root.mainloop() 后面的内容,除非将窗体关了

其实也好理解,对于python tkinter编程,来说,mainloop()就进入到事件(消息)循环。等待检测到事件,然后刷新组件

其实其他gui编程也有类似的机制,那么如何解决这个问题呢、笔者将自己找到的方法记录如下:

from tkinter import *
import time

root = Tk()
root.title("Author:QQ-5201351")

def task():
    print(time.time())
    root.after(1000, task)

root.after(1000, task)

root.mainloop()

这样运行后,窗体会一直保持着,而且每1秒都能执行一下task函数中的代码,这两行代码,笔者说明一下作用:

1、主体的root.after(1000, task) 代表窗体运行后,1000毫秒后,执行task函数,但是只会执行一次~

2、task()函数体中的root.after(1000, task),也就是这个函数执行完了,每隔1秒再执行,循环执行~

因此这两条是核心的两条代码,缺一不可~

 

 

尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/16758714.html

 

标签:task,tkinter,某段,mainloop,gui,窗体,time,root
From: https://www.cnblogs.com/5201351/p/16758714.html

相关文章

  • Eclipse颜色主题(Color Theme)与缩进线(Indent Guide)插件安装教程
    摘要:这篇博文主要介绍Eclipse的颜色主题插件(ColorTheme)的安装教程,以及如何使用缩进线插件为编辑器中代码添加类似VisualStudio中的缩进线,以对Eclipse编辑器界面进行美......
  • ImGui渲染3d元素的方法
    目前主要有2种方法:一是简单场景,可以自己处理3维坐标向屏幕坐标的转换,然后调用ImGui的二维绘制函数进行渲染;二是复杂场景,首先在3d引擎侧渲染到bufferframe,然后调用ImGui的......
  • GIT-atguigu
    Git概述Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目Git易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存......
  • Tkinter:文本框Entry
    文本框基本概念单行的文本框,是用于输入的最基本Widget控件,可以使用它输入单行字符串,如果所输入的字符串长度大于文本框的宽度,所输入的文字会自动隐藏造成部分内容无法显示。......
  • 基于Matlab GUI的PID研究
    前言:偷懒了一段时间,最近计划分享一些之前做过的项目,本期分享基于MatlabGUI的PID研究。本例子中设计一个PID控制器来研究不同参数对输出结果的影响,PID控制器由比例单元 P、......
  • ImGUI 1.87 绘制D3D外部菜单
    ImGUI它是与平台无关的C++轻量级跨平台图形界面库,没有任何第三方依赖,可以将ImGUI的源码直接加到项目中使用,该框架通常会配合特定的D3Dx9等图形开发工具......
  • GUI编程
    我们要怎么学?是什么,怎么玩,怎么用组件窗口弹窗面板文本框列表框按钮图片监听事件键盘事件破解工具1.简介GUI的核心技术:SwingAW......
  • ABAP语法笔记08 - 事件2和GUI状态
    ATLINE-SELECTION."双击行的时候触发的事件一般用来跳转TOP-OF-PAGEDURINGLINE-SELECTION."双击行显示的次级表单的抬头执行逻辑 GETCURSORFIELDfi......
  • 无需内嵌代码的全新GUI截图方案在TouchGFX,ThreadX GUIX,emWin,LVGL,AWTK全部测试通过,含多
    搞GUI这么多年来,这个问题一直是个心病,通过这段时间的研究,终于有个产品样子了。早期包括现在做产品效果展示,需要截屏时,很多时候依然采用的SD卡/U盘这种的古老方案,不仅麻烦,......
  • guice AssistedInject 简单说明
    guiceAssistedInject主要的场景是解决一个对象的创建同时依赖一个实例访问以及ioc容器,通用的解决方法是通过工厂方法,因为比较常见,所以guice提供了一个扩展,可以解决类......