我想要添加和删除标签到我的图层窗口框架点击按钮。
def Option_1_Function():
def Add_Label_Function():
My_Label_1 = Label(root_Option_1, text="First Label")
My_Label_1.pack(side=BOTTOM)
My_Label_2 = Label(root_Option_1, text="Second Label")
My_Label_2.pack(side=BOTTOM)
My_Label_3 = Label(root_Option_1, text="Third Label")
My_Label_3.pack(side=BOTTOM)
return
def Delete_Label_Function():
My_Label_1.Destroy()
My_Label_2.Destroy()
My_Label_3.Destroy()
return
root_Option_1 = Toplevel()
root_Option_1.geometry("300x300")
My_Button_3 = Button(root_Option_1, text="Add Label", command=Add_Label_Function)
My_Button_3.pack(side=LEFT)
My_Button_4 = Button(root_Option_1, text="Delete Label", command=Delete_Label_Function)
My_Button_4.pack(side=RIGHT)
root_Option_1.mainloop()
return
def Option_2_Function():
return
root = Tk()
root.geometry("200x200")
My_Button_1 = Button(root, text="Option 1", command=Option_1_Function)
My_Button_1.pack(side=LEFT)
My_Button_2 = Button(root, text="Option 2", command=Option_2_Function)
My_Button_2.pack(side=RIGHT)
root.mainloop()所以我得到了这个错误。
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\jlabonte\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 1549, in __call__
return self.func(*args)
File "C:\Users\jlabonte\Desktop\test.py", line 22, in Delete_Label_Function
My_Label_1.Destroy()
NameError: name 'My_Label_1' is not defined我对编码很陌生,所以如果我做错了,请告诉我。
1)我希望创建一个具有许多不同选项按钮的第一个窗口。
2)然后,通过选择一个选项按钮,创建第二个窗口,该窗口将有一个add和delete按钮。
3)然后,我希望能够添加和删除标签到我的第二个窗口,通过选择这些按钮的次数,我想要。
到目前为止,我发现能够这样做的是为我的按钮创建一个函数,我可以用command=调用该函数。但是,由于变量只存在于它们所创建的函数中,所以我无法销毁不存在的内容。
那么,如何才能使我的添加标签和删除标签按钮正常工作呢?
谢谢。
发布于 2016-02-24 23:10:41
你必须保持对每个标签的引用。您在Add_Label_Function()中创建的引用是本地的(仅在函数中),因此在该函数退出时将被垃圾收集。这是我坐过的节目。它通过将按钮添加到字典中来保持对按钮的引用。请注意,使用按钮和grid.forget()代替标签和破坏,但原则是相同的。
from Tkinter import *
from functools import partial
class ButtonsTest:
def __init__(self):
self.top = Tk()
self.top.title("Click a button to remove")
self.top_frame = Frame(self.top, width =400, height=400)
self.button_dic = {}
self.buttons()
self.top_frame.grid(row=0, column=1)
Button(self.top_frame, text='Exit', bg="orange",
command=self.top.quit).grid(row=10,column=1, columnspan=5)
self.top.mainloop()
##-------------------------------------------------------------------.........
def buttons(self):
b_row=1
b_col=0
for but_num in range(1, 11):
## create a button and send the button's number to
## self.cb_handler when the button is pressed
b = Button(self.top_frame, text = str(but_num),.
command=partial(self.cb_handler, but_num))
b.grid(row=b_row, column=b_col)
## dictionary key=button number --> button instance
self.button_dic[but_num] = b
b_col += 1
if b_col > 4:
b_col = 0
b_row += 1
##----------------------------------------------------------------
def cb_handler( self, cb_number ):
print "\ncb_handler", cb_number
self.button_dic[cb_number].grid_forget()
##===================================================================
BT=ButtonsTest()发布于 2020-07-19 10:28:44
用途:
global My_Label_X 使标签作为变量可用,仅此而已
对回答的人来说,更简单;)
https://stackoverflow.com/questions/35611795
复制相似问题