当前位置: 首页 > 知识库问答 >
问题:

当环路干扰tkinter中的“after”时[重复]

瞿博学
2023-03-14

下面的代码依次从列表中提取每个项目,打印其名称并更改帧的颜色属性。这一切都是可行的,但它是瞬间发生的,而不是以1000毫秒的间隔发生。使用带有“after”的while循环不是很好吗?

import tkinter as tk

list= ['red','green','orange','thistle','yellow']

items= (i for i in list)

def alt_colour():
    while True:                     
        try:

            item=next(items)
            print(f'item is {item}')        
            frame['bg']=item
            frame.after(1000,alt_colour)
        except StopIteration:
            #list exhausted
            break   


root=tk.Tk()
frame=tk.Frame(root,width=200,height=100,bg='blue')
frame.pack()

btn=tk.Button(root,command=alt_colour,text='Change Colour')
btn.pack()
root.mainloop()

共有1个答案

樊奇思
2023-03-14

只需删除while循环:

import tkinter as tk

list= ['red','green','orange','thistle','yellow']

items= (i for i in list)

def alt_colour():                 
    try:
        item=next(items)
        print(f'item is {item}')        
        frame['bg']=item
        frame.after(1000,alt_colour)
    except StopIteration:
        #list exhausted
        pass


root=tk.Tk()
frame=tk.Frame(root,width=200,height=100,bg='blue')
frame.pack()

btn=tk.Button(root,command=alt_colour,text='Change Colour')
btn.pack()
root.mainloop()
 类似资料:
  • 我正在尝试用React制作Laravel应用程序。我想从注册和授权表单开始。所以我用拉威尔的命令做了这些 作曲家需要laravel/ui PHP工匠ui反应 PHP工匠ui反应--auth 但不幸的是,smth出错了,当我使用登录时,主页的路由不起作用。问题出在哪里? 应用程序\Http\控制器\Auth\登录 应用程序\控制器\家庭控制器 应用程序/提供商/路由服务提供商 视图\主页 路由\we

  • 我试图做的是防止用户在我的输入中输入空字符串。现在,用户只能输入数字。然而,没有什么能阻止他们将文本字段留空。我想限制他们在程序空白时按我的按钮启动程序。 现在,我的文本字段最初是空白的,按钮最初是灰色的。但当我输入一些东西时,按钮保持灰色。请记住,所有这些代码都在构造函数中。

  • 我已经编写了一个服务器-客户端(两个程序)结构,它工作正常。。。仅当使用TCP时。我的想法是使用TCP进行文本聊天传输(udp不可靠),但使用udp进行游戏数据包传输(是的,这是一种每秒30帧的动作游戏,所以我需要udp)。 但是,当我在客户端进程中与TCP建立连接时,我开始向服务器程序发送UDP数据包,并从服务器程序接收UDP数据包。客户端在单个线程中使用非阻塞套接字、UDP和TCP。这里没有多

  • 如何监控LMAX Disruptor?假设我有3个环缓冲区,并希望提供一个用户界面来提供环缓冲区的信息。

  • 我想在JavaFX中使用拖放,并有一个功能,您可以直观地看到正在拖动的项目。我已经实现了我认为可行的解决方案,但API似乎存在问题。 根据API start DragAndDrop(TransferMode...)必须在setOnDragDetted中初始化。这是我使用Dragboard存储我想传输到另一个节点的内容的地方。 编辑:这似乎与TrasferMode有关。如果我使用TransferMo

  • 概述 无干扰模式将只在显示器中以全屏模式显示你的文件,可以在菜单栏中的View - 切换无干扰模式进入无干扰模式,快捷键也可以。 定制化 无干扰模式将使某些设置生效,默认设置(位于Packages/Default/Distraction Free.sublime-settings)是: { "line_numbers": false, "gutter": false, "draw_ce