Python 2.x与Tkinter网格文本更新

时间:2016-12-09 14:39:29

标签: python tkinter

我想编写一个Python和Tkinter应用程序,上面有一种表格。

因此,使用Tkinter,我能够创建一个包含行和列的“Excel-licke”表。

但是现在我想定期更新值(每30秒一次)。 如果我循环网格,那么程序变慢,运行的时间越长。 我想,这不是创建新网格的最好方法。

那么如何制作网格并且只在循环中更新值?

1 个答案:

答案 0 :(得分:0)

你的问题的答案几乎就是你写的:创建一次小部件,然后创建一个循环来定期更新值。

以下是一个例子:

import Tkinter as tk
import random

class Table(tk.Frame):
    def __init__(self, parent, rows=10, columns=10):
        tk.Frame.__init__(self, parent)
        self.rows = rows
        self.columns = columns
        self.widgets = []
        for r in range(rows):
            row = []
            self.widgets.append(row)
            for c in range(columns):
                cell = tk.Label(self)
                cell.grid(row=r, column=c, sticky="nsew")
                row.append(cell)

        for  r in range(rows):
            self.grid_rowconfigure(r, weight=1)

        for c in range(columns):
            self.grid_columnconfigure(c, weight=1)

        self.refresh()

    def refresh(self):
        for r in range(self.rows):
            for c in range(self.columns):
                self.widgets[r][c].configure(text=random.randint(0,99))

        # call this function again in 5 seconds
        self.after(5000, self.refresh)

root = tk.Tk()
Table(root).pack(fill="both", expand=True)
root.mainloop()