我需要减慢python tkinter应用程序中的循环

索林·施密特

我在使用相当简单的应用程序时遇到了问题。它可以正常运行,但是我希望它的运行速度稍慢一些。

想法是从列表中随机生成一个名称,将其显示,然后每次单击按钮将其从列表中删除。

为了使它更有趣,我希望程序在选择最后一个名字之前先显示几个名字。我为此使用了一个简单的for循环。但是,代码执行得如此之快,最后显示的唯一名称是最后一个。

使用time.sleep()仅会延迟显示姓氏。没有显示其他名称。

这是我的代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from tkinter import *
import random
import time

class Application(Frame):
    def __init__(self, master):
        """ Initialize the frame. """
        super(Application, self).__init__(master)  
        self.grid()
        self.name_list = ["Thorin","Tyler","Jose","Bryson","Joe"]
        self.create_widget()

    def create_widget(self):
        self.lbl = Label(self)
        self.lbl["text"] = "Click to spin"
        self.lbl["font"] = ("Arial", 24) 
        self.lbl.grid()

        self.bttn = Button(self)
        self.bttn["text"]= "Spin"
        self.bttn["command"] = self.spin
        self.bttn.grid()

    def spin(self):
        if self.name_list:
            for i in range(5):
                index = random.randrange(len(self.name_list))
                self.lbl["text"] = self.name_list[index]
                self.lbl.grid()
            self.name_list.pop(index)
        else:
            self.lbl["text"] = "No more names"
            self.lbl.grid()

def main():
    root = Tk()
    root.title("Click Counter")
    root.geometry("600x600")

    app = Application(root)

    root.mainloop()

if __name__ == '__main__':
    main()
凯文

这是与GUI编程相关的常见问题。问题的核心是窗口绘图管理器。只要您的函数正在执行,图形管理器就会冻结;在功能结束之前,更新标签的文本不会有明显的效果。因此,如果您在其中for包含一个sleep(1)命令循环,则该方法将冻结所有内容五秒钟,然后在函数最终结束时使用最终值进行更新。

解决方案是使用该after方法,该方法告诉Tkinter在将来的某个时刻调用指定的函数。不同于sleep,这为图形管理器提供了更新窗口所需的呼吸空间。

一种可能的方法是用以下方法注册六个事件after:五个事件用于中间名称标签更新,另一个事件用于最终名称更改和弹出。

def spin(self):
    def change_name():
        index = random.randrange(len(self.name_list))
        self.lbl["text"] = self.name_list[index]
        self.lbl.grid()
    def finish_spinning():
        index = random.randrange(len(self.name_list))
        self.lbl["text"] = self.name_list[index]
        self.lbl.grid()
        self.name_list.pop(index)
    if self.name_list:
        name_changes = 5
        for i in range(name_changes):
            self.after(100*i, change_name)
        self.after(100*name_changes, finish_spinning)
    else:
        self.lbl["text"] = "No more names"
        self.lbl.grid()

(免责声明:这只是您可能如何使用的一个简单示例after,可能不适合实际使用。特别是,如果在名称已经旋转的情况下反复按“旋转”按钮,它的行为可能会很差。change_name之间的代码重复finish_spinning非常难看)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Tkinter Python应用程序中删除视频?

来自分类Dev

Tkinter Python应用程序中的布局管理问题

来自分类Dev

在wxPython应用程序中实现我自己的事件循环

来自分类Dev

在Python MDI应用程序中结束GTK +主循环

来自分类Dev

减慢应用程序

来自分类Dev

如何在我的 Python 应用程序中添加自定义 tkinter 文本框?

来自分类Dev

NSLog会减慢我的应用程序速度吗?

来自分类Dev

Android XML设计减慢了我的应用程序

来自分类Dev

NSLog会减慢我的应用程序速度吗?

来自分类Dev

我是否需要加入应用程序中的每个线程?

来自分类Dev

For循环使我的swing应用程序停顿,直到循环完成

来自分类Dev

在Python 3中开发类似tkinter记事本的应用程序时发生TypeError

来自分类Dev

基于tkinter GUI的Reddit Scraper应用程序中的NameError --Python

来自分类Dev

如何使用python中的Tkinter库获得简单的绘画应用程序以在屏幕上显示结果?

来自分类Dev

在循环执行过程中,Android可以杀死我的应用程序吗?

来自分类Dev

如何使用C#进行for循环以将图像加载到我的应用程序中?

来自分类Dev

如何使我的应用程序延迟并在循环的每次迭代中更新布局的组件

来自分类Dev

休息正在减慢我的循环?

来自分类Dev

尝试打破Python 3中的“接收”循环时,服务器套接字应用程序将变成无限循环

来自分类Dev

我需要在我的应用程序的quickoffice中打开.doc文件,而无需寻找合适的应用程序(选项)

来自分类Dev

需要帮助,可从应用程序脚本中的“范围列表中”获取数据验证条件,以便我可以循环浏览这些值

来自分类Dev

Python tkinter应用程序需要一个目前不存在的变量

来自分类Dev

我的应用程序无法正常工作(无限循环)

来自分类Dev

python tkinter应用程序在多行上相同的文本

来自分类Dev

Python [Tkinter]应用程序未显示所有信息

来自分类Dev

如何管理 Python Tkinter 应用程序多线程

来自分类Dev

我的应用程序中的权限错误

来自分类Dev

在我的应用程序中接收短信

来自分类Dev

我的应用程序在MainActivity中崩溃

Related 相关文章

  1. 1

    如何在Tkinter Python应用程序中删除视频?

  2. 2

    Tkinter Python应用程序中的布局管理问题

  3. 3

    在wxPython应用程序中实现我自己的事件循环

  4. 4

    在Python MDI应用程序中结束GTK +主循环

  5. 5

    减慢应用程序

  6. 6

    如何在我的 Python 应用程序中添加自定义 tkinter 文本框?

  7. 7

    NSLog会减慢我的应用程序速度吗?

  8. 8

    Android XML设计减慢了我的应用程序

  9. 9

    NSLog会减慢我的应用程序速度吗?

  10. 10

    我是否需要加入应用程序中的每个线程?

  11. 11

    For循环使我的swing应用程序停顿,直到循环完成

  12. 12

    在Python 3中开发类似tkinter记事本的应用程序时发生TypeError

  13. 13

    基于tkinter GUI的Reddit Scraper应用程序中的NameError --Python

  14. 14

    如何使用python中的Tkinter库获得简单的绘画应用程序以在屏幕上显示结果?

  15. 15

    在循环执行过程中,Android可以杀死我的应用程序吗?

  16. 16

    如何使用C#进行for循环以将图像加载到我的应用程序中?

  17. 17

    如何使我的应用程序延迟并在循环的每次迭代中更新布局的组件

  18. 18

    休息正在减慢我的循环?

  19. 19

    尝试打破Python 3中的“接收”循环时,服务器套接字应用程序将变成无限循环

  20. 20

    我需要在我的应用程序的quickoffice中打开.doc文件,而无需寻找合适的应用程序(选项)

  21. 21

    需要帮助,可从应用程序脚本中的“范围列表中”获取数据验证条件,以便我可以循环浏览这些值

  22. 22

    Python tkinter应用程序需要一个目前不存在的变量

  23. 23

    我的应用程序无法正常工作(无限循环)

  24. 24

    python tkinter应用程序在多行上相同的文本

  25. 25

    Python [Tkinter]应用程序未显示所有信息

  26. 26

    如何管理 Python Tkinter 应用程序多线程

  27. 27

    我的应用程序中的权限错误

  28. 28

    在我的应用程序中接收短信

  29. 29

    我的应用程序在MainActivity中崩溃

热门标签

归档