如何使tkinter按钮自行单击?

如何使tkinter按钮自行单击?,tkinter,tkinter-button,Tkinter,Tkinter Button,我想给我的朋友做一个点击游戏。我只是想知道如何制作一个按钮,当点击时,点击另一个按钮。下面是一些代码: 从tkinter导入* 导入时间 root=Tk() 根几何体('600x600') 分数=2000000 点击器计数器=0 def计数器(): 全球得分 分数+=1 points\u label.config(文本=分数) def自动清除器(args): 全局点击计数器 如果args==1: 通过 def clickerpurchase(): 全局点击计数器 全球得分 如果得分>=1000:

我想给我的朋友做一个点击游戏。我只是想知道如何制作一个按钮,当点击时,点击另一个按钮。下面是一些代码:

从tkinter导入*
导入时间
root=Tk()
根几何体('600x600')
分数=2000000
点击器计数器=0
def计数器():
全球得分
分数+=1
points\u label.config(文本=分数)
def自动清除器(args):
全局点击计数器
如果args==1:
通过
def clickerpurchase():
全局点击计数器
全球得分
如果得分>=1000:
分数-=1000
点击器计数器+=1
points\u label.config(文本=分数)
点击器标签['text']+=str(点击器计数器)
clicker\u label.config(text='purchase clicker(1k):'+str(clicker\u counter))
clicker_button=按钮(root,text='purchase',command=lambda:[clickerpurchase,autoclicker(1)])
点击按钮网格(行=0,列=3)
clicker_label=label(root,text='purchase clicker(1k):')
clicker_label.grid(行=0,列=2)
点\标签=标签(根,文本=0')
点标签网格(行=0,列=1)
点按钮=按钮(root,text='click me',command=计数器)
点按钮网格(行=0,列=0)
points\u label.config(文本=分数)
root.mainloop()
点击按钮
是主要问题。
clickerpurchase()
函数负责更新
分数
clicker\u计数器
。该按钮还绑定到
自动单击器(args)
。我想让
点击按钮
每隔一段时间点击
点按钮
。我想把自动点击代码放到
autoclicker(args)
函数中,但我不知道它的代码

编辑: 我在我的
计数器()
函数中做了一个“while”循环,并在其中添加了
args
。我给了
points\u按钮
一个arg值1和
clicker\u按钮
一个arg值2。我的代码现在如下所示:

def counter(args):
    global score
    if args == 1:
        score += 1
        points_label.config(text=score)
    if args == 2:
        while args == 2:
            time.sleep(1)
            points_button.invoke()

points_button = Button(root, text='click me', command=counter(1))
points_button.grid(row=0, column=0)

clicker_button = Button(root, text='purchase', command=lambda:[clickerpurchase, counter(2)])
clicker_button.grid(row=0, column=3)

每当我点击
clicker\u按钮
时,就会点击
points\u按钮
,但程序崩溃。我完全放弃了
autoclicker(args)
函数。

就您的函数而言,您可以尝试以下操作

def自动单击器(args):
全局点击计数器
如果args==1:
时间间隔=1000#随意更改
点按钮。调用()
root.after(时间间隔,lambda:autoclicker(1))
我使用了
root.after()
方法,这将调用您指定的
points\u按钮
每隔
时间间隔
毫秒

另外,据我所知,你的目标是(请随时纠正我的这一点),你实际上不需要一个按钮来增加分数,你只需将代码中的
points\u按钮。invoke()
替换为
counter()
,它应该会给出相同的结果。即使您计划使用多个参数,也可以将不同的参数传递给
clickerpurchase()
counter()
autoclicker(args)
,以使每个项目都有不同的分数

编辑(问题编辑后)

time.sleep()
在无限循环中无法工作,因为整个程序将等待该循环完成,然后才能执行任何其他操作,因此它停止响应并崩溃。尝试使用
.after()
方法,方法与我上面提到的类似

如果您不想使用编辑中提到的
autoclicker()
功能,可以进行以下更改

def计数器(args):
全球得分
如果args==1:
分数+=1
points\u label.config(文本=分数)
elif args==2:
时间间隔=1000#随意更改
点按钮。调用()
root.after(时间间隔,λ:计数器(2))
points_button=按钮(root,text='click me',command=lambda:counter(1))

为什么要单击按钮?您可以根据需要每隔一段时间调用关联的函数
counter()
。此外,
args
的值有什么意义?@AST args值没有任何作用。我只是在寻找解决问题的方法。请阅读文档。该按钮有一个
invoke
方法。@AST不是手动单击获取分数,而是希望程序每隔一段时间为我单击一次。注意,分数应该等于零。我将其设置得很高是为了测试目的。另外一件事只是为了供您参考,我注意到了一个逻辑问题,如果此人在单击按钮后单击了
clicker\u按钮
,因为您已将
计数器(2)
链接到该按钮,它会增加分数更新的频率,也不会降低分数,为了克服这一问题,您可以从“购买”按钮中取消调用
计数器
功能,并在
单击采购
中添加一些条件,如
计数器(2)
仅在分数=0时调用