tkinter车窗在一段时间后发出毛刺(tkinter)

2024-10-04 01:31:03 发布

您现在位置:Python中文网/ 问答频道 /正文

tkinter gui glitching out

有人知道为什么我的tkinter在大约2.5分钟后出现这样的故障吗

这段代码是最小的例子,所以它不会有彩色单元格,但它是相同的问题

from tkinter import *
import random

tk = Tk()
tk.wm_title("Battleship")
# forming tkinter window

def baseGrid():
    tk.player_canvas = Canvas(tk, height=300, width=300, highlightbackground='black', highlightthickness=0.5)
    tk.ai_canvas = Canvas(tk, height=300, width=300, highlightbackground='black', highlightthickness=0.5)
    tk.player_canvas.grid(row=1, column=0, padx=50)
    tk.ai_canvas.grid(row=1, column=1, padx=50)
    for x in range(10):
        for y in range(10):
            tk.player_canvas.create_rectangle(x * 30, y * 30, 300, 300, fill='white')
            tk.ai_canvas.create_rectangle(x * 30, y * 30, 300, 300, fill='white')


while True:
    tk.update()
    tk.update_idletasks()
    place = baseGrid()


Tags: importtkinterwidthaitkgridrowcanvas
1条回答
网友
1楼 · 发布于 2024-10-04 01:31:03

您的循环导致内存泄漏。我不确定确切的原因,因为我没有测试是什么导致了它,但我几乎肯定这是因为你在彼此上面画了无数个矩形。我只是把你的代码改成我将如何编写来修复它

from tkinter import *
import random

tk = Tk()
tk.wm_title("Battleship")
# forming tkinter window

# While technically you can add the canvas objects to your window I don't know if that is best practice.
player_canvas = Canvas(tk, height=300, width=300, highlightbackground='black', highlightthickness=0.5)
ai_canvas = Canvas(tk, height=300, width=300, highlightbackground='black', highlightthickness=0.5)


def baseGrid():
    player_canvas.grid(row=1, column=0, padx=50)
    ai_canvas.grid(row=1, column=1, padx=50)
    for x in range(10):
        for y in range(10):
            player_canvas.create_rectangle(x * 30, y * 30, 300, 300, fill='white')
            ai_canvas.create_rectangle(x * 30, y * 30, 300, 300, fill='white')


baseGrid()  # you are not returning anything so you do not need the place variable

tk.mainloop()  # you should just run mainloop so that Tkinter can manage the loop.

相关问题 更多 >