【问题标题】:Tkinter - update ListBox in a loopTkinter - 在循环中更新 ListBox
【发布时间】:2020-04-08 03:52:16
【问题描述】:

我是 Tkinter 的新手,我遇到了这个问题:

我想在循环中使用新值更新我的ListBox,以便在循环期间将值添加到其中,而不仅仅是在结束时。

这是我的问题的示例代码:

import time
import tkinter as tk

class mainApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        listbox = tk.Listbox(self)
        button3 = tk.Button(self, text="addValues",
                            command=lambda : self.addValues(listbox))
        button3.pack()

    def addValues(self,listbox):
        for i in range(10):
            time.sleep(1)
            listbox.insert(tk.END, str(i))
            listbox.pack()


app = mainApp("test")
app.mainloop()

在这里,我希望每次向ListBox 添加值时更新Frame

【问题讨论】:

  • 1. listbox.pack() 与向listbox 插入数据无关。将其移至__init__2. 您使用的是OOP 表示法,因此您必须使用self.listbox3. 不需要lambda,改为command=self.addValues4.使用time.sleep(...会屏蔽tkinter.mainloop(),不要使用。

标签: python loops tkinter


【解决方案1】:

您不能以您习惯的相同程序方式对 tkinter 应用程序进行编程,因为其中的所有内容都必须在其 mainloop() 运行时发生。 Tkinter 是一个用于编写 GUI 的事件驱动框架。

这里是如何使用通用小部件方法 after() 执行您想要的操作,它必须安排回调到一个在短暂延迟后执行插入的方法(如果 LIMIT 没有,则设置另一个对自身的调用'未到达)。

import time
import tkinter as tk

LIMIT = 10
DELAY = 1000  # Millisecs


class mainApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        listbox = tk.Listbox(self)
        listbox.pack()
        button3 = tk.Button(self, text="addValues",
                            command=lambda : self.addValues(listbox))
        button3.pack()

    def addValues(self, listbox):
         self.after(DELAY, self.insertValue, listbox, 0, LIMIT)

    # ADDED
    def insertValue(self, listbox, value, limit):
        if value < limit:
            listbox.insert(tk.END, str(value))
            self.after(DELAY, self.insertValue, listbox, value+1, limit)


app = mainApp("test")
app.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-16
    • 2021-08-11
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 2020-11-26
    相关资源
    最近更新 更多