微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

你能让一个按钮自己创建吗?

如何解决你能让一个按钮自己创建吗?

所以我想制作一个按钮,当我点击它时,它会被删除并出现另一个,并且可以无限次地完成

a=0
button1 = [1,2,3,4,5,6]

def ButtonClick():

     global a
     #Destroys the first button
     button1[a].destroy()

     a+a+1

     #Making new button,that should do the same as the old button
     button1[a] = tk.Button(text='hello',command=ButtonClick)
     canvas1.create_window(250+a*50,140,window=button1[a])


  

button1[a] = tk.Button(text='hello',command=ButtonClick)
canvas1.create_window(100,window=button1[a])

正如你所看到的,新按钮也使用了 command=ButtonClick,所以当我按下创建的按钮时,它应该和旧按钮一样,但它没有,我不是确定为什么,因为当我更改新按钮上的命令时,它会显示错误,因此它以某种方式裁判 def ButtonClick。但是当我按下新按钮时没有任何反应。谁能帮帮我?

解决方法

为了销毁和重建按钮,您必须将其设为全局。这是一个可以被自己的函数销毁的按钮的工作示例,只能再次创建:

def ButtonClick():
    global root
    root.b.destroy()
    root.b = Button(root,text="Hello",command=ButtonClick)
    root.c.create_window(250+root.button1[root.bnumber]*50,140,window=root.b)
    if root.bnumber<len(root.button1)-1:root.bnumber+=1
    
global root
root = Tk()
root.geometry('800x600')
root.resizable(0,0)
root.c = Canvas(root,bg="#ffffff",width=800,height=600)
root.c.grid(row=0,column=0,sticky=W+S+E+N)

root.b = Button(root,command=ButtonClick)
root.c.create_window(100,window=root.b)
root.button1 = [1,2,3,4,5]
root.bnumber = 0

我制作了您的 button1 列表和 tkinter 小部件的当前索引 (a) 属性,因此只要函数可以访问小部件,就可以访问它。

然而,对于这个例子,在 tkinter 画布内移动窗口会更容易,而不是删除并重新创建它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。