0

tkinter gui 出现故障

有人知道为什么我的 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()

4

1 回答 1

2

您的循环导致内存泄漏。我不确定究竟是因为我没有测试是什么原因造成的,但我几乎可以肯定这是因为你在彼此之上绘制了无限数量的矩形。我只是将您的代码更改为我将如何编写它来修复它。

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.

于 2019-11-12T13:33:41.310 回答