簡體   English   中英

如何更新python tkinter窗口

[英]How to update python tkinter window

我目前正在嘗試每秒更新TKinter窗口。 因此,想法是應該打開一個窗口,讓python更新字段,顯示更新后的窗口。 現在的情況是第二個窗口僅在我關閉第一個窗口時顯示。 我猜想這與mainloop()有關。 我研究了.update()和.update_idletasks(),但是我不知道如何實現它。 TKinter用於顯示帶有房屋的字段。 所以一般來說應該這樣做:

  • 生成房屋位置(已實施)
  • 顯示帶有房屋的字段(已實施)
  • 生成房屋的新位置(已實施)
  • 顯示更新的字段

這是我當前的代碼。 我不確定是否需要更新功能。

    class Plot(tk.Frame):
        def __init__(self, master=None):
            tk.Frame.__init__(self, master)
            self.grid()

        def createWidgets(self, list_houses):
            houses = list_houses
            self.w = tk.Canvas(self, width = field.width*SIZE, height = field.height*SIZE, bg = '#E4E4E4')

            ...

            self.w.grid()

        def update(self):
            ?

#GENERATES FIELD AND HOUSES
...

#PRINT FIRST WINDOW
plot = Plot()
plot.createWidgets(houses) <- PUT HOUSES IN TK INTER
plot.master.title('map of houses')
plot.mainloop()

# UPDATE FIELD <- THIS PART IS ONLY EXECUTED WHEN I CLOSE THE FIRST WINDOW, WHY?
i = 0
while i < 2:
    update = field.update_houses(houses) <- GENERATES NEW LOCATION OF HOUSES

    #PRINT UPDATED WINDOW, IT SHOULD BE PRINTED IN THE SAME WINDOW!
    plot = Plot()
    plot.createWidgets(houses) <- PUT HOUSES IN TKINTER
    plot.master.title('map of houses')

    i += 1

提前致謝!

您的更新字段僅在您關閉窗口時執行,因為tkinter的mainloop一直運行直到關閉窗口。 由於這個主循環,在tkinter中使用(long)while循環是一個壞主意,因為while循環會鎖定tkinter主循環。

要多次執行某項操作而不阻塞主循環,請使用after方法。 一定時間后,這將調用一個函數。 您可以在進入主循環之前調用一次,然后在更新函數中再次調用它,以便更新函數自行調用。 看一下這個小例子,它每秒使用一次after執行更新功能:

import Tkinter as tk
import random

def update():
    l.config(text=str(random.random()))
    root.after(1000, update)

root = tk.Tk()
l = tk.Label(text='0')
l.pack()
root.after(1000, update)
root.mainloop()

您可以在窗口中使用.update 這將使其更新窗口並允許所有內容在其上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM