首页 > 解决方案 > tkinter GUI 中的意外数据泄漏

问题描述

最近我开始用 Python 制作一款名为 Robbery Clicker 的游戏。我的项目tkinter最近使用并很好地工作了相对论。

本质上,下面显示的代码将在被 GUI 上的按钮小部件调用后运行:

def auto1():
    global coins
    global item1_auto
    if coins >= 250:
        coins -= 250
        runauto1()
        item1_auto = 1
        click1["state"] = DISABLED
        click1.update()
        click1_auto.config(state=DISABLED)

def runauto1():
    global coins
    global item1_sleep
    global item1
    global item1_cost
    click1.after(int(item1_sleep * 1000), runauto1)
    click1.after(int(item1_sleep * 1000), do1())

然而在实现了这段代码之后,点击按钮后立即发生内存泄漏,并且在解决后大约 10 秒后,会导致不可解决的内存泄漏。

我的整个代码可以在这里找到:https ://pastebin.com/pHwZFwZV

标签: pythonpython-3.xtkintermemory-leaks

解决方案


至少部分问题是这样的:click1.after(int(item1_sleep * 1000), do1())您是立即调用do1()而不是将其放入队列中。就像你做的一样result=do1(); click1.after(int(item1_sleep * 1000), None)。如果这导致runauto1被调用,您将很快创建一个递归错误。


推荐阅读