我正在使用place()
,而不是place_forget()
手动每个小部件,有没有办法取消放置在canvas_resources
上的所有小部件?
from Tkinter import *
root = Tk()
root.geometry("200x200")
canvas_state=1
def toggle(event):
global canvas_state
if canvas_state==0:
btn1_res.place_forget()
btn2_res.place_forget()
canvas_state=1
return
if canvas_state==1:
btn1_res.place(x=30, y=10)
btn2_res.place(x=30, y=50)
canvas_state=0
return
canvas_resources = Canvas(root, height=200, width=100, bg='#182219')
canvas_resources.place(x=-2, y=-2)
btn1_res = Button(canvas_resources, text='TEXT1')
btn2_res = Button(canvas_resources, text='TEXT2')
btn3_res = Button(root, text='TEXT3')
btn3_res.place(x=150, y=150)
root.bind('<Return>', toggle)
root.mainloop()
答案 0 :(得分:2)
不,没有。如果您要“取消放置”添加了place
的小部件,唯一的选择是为每个小部件调用place_forget
。
您可以使用place_slaves
获取其他窗口小部件中place
管理的所有窗口小部件的列表。例如,您可以这样做:
for widget in canvas_resources.place_slaves():
widget.place_forget()
答案 1 :(得分:-2)
所以,按照@BryanOakley的方向,在循环中添加canvas.place_slaves()
就是我要求的。
from Tkinter import *
root = Tk()
root.geometry("200x200")
canvas_state=1
def toggle(event):
global canvas_state
if canvas_state==0:
for item in canvas_resources.place_slaves():
item.place_forget()
canvas_state=1
return
if canvas_state==1:
btn1_res.place(x=30, y=10)
btn2_res.place(x=30, y=50)
canvas_state=0
return
canvas_resources = Canvas(root, height=200, width=100, bg='#182219')
canvas_resources.place(x=-2, y=-2)
btn1_res = Button(canvas_resources, text='TEXT1')
btn2_res = Button(canvas_resources, text='TEXT2')
btn3_res = Button(root, text='TEXT3')
btn3_res.place(x=150, y=150)
root.bind('<Return>', toggle)
root.mainloop()
谢谢!