tkinter GUI 中的意外数据泄漏
Unexpected data-leak in a tkinter GUI
最近我开始在 Python 制作一款名为 Robbery Clicker 的游戏。我的项目使用 tkinter
并且最近在 relativity 上运行良好。
基本上,下面显示的代码在被 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
至少部分问题是这样的:click1.after(int(item1_sleep * 1000), do1())
您立即调用do1()
而不是将其放入队列中。就好像你做了 result=do1(); click1.after(int(item1_sleep * 1000), None)
一样。如果这导致 runauto1
被调用,您将很快创建一个递归错误。
最近我开始在 Python 制作一款名为 Robbery Clicker 的游戏。我的项目使用 tkinter
并且最近在 relativity 上运行良好。
基本上,下面显示的代码在被 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
至少部分问题是这样的:click1.after(int(item1_sleep * 1000), do1())
您立即调用do1()
而不是将其放入队列中。就好像你做了 result=do1(); click1.after(int(item1_sleep * 1000), None)
一样。如果这导致 runauto1
被调用,您将很快创建一个递归错误。