首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Label.Destroy难度

Label.Destroy难度
EN

Stack Overflow用户
提问于 2016-02-24 19:56:01
回答 2查看 252关注 0票数 0

我想要添加和删除标签到我的图层窗口框架点击按钮。

代码语言:javascript
复制
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()

所以我得到了这个错误。

代码语言:javascript
复制
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=调用该函数。但是,由于变量只存在于它们所创建的函数中,所以我无法销毁不存在的内容。

那么,如何才能使我的添加标签和删除标签按钮正常工作呢?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-24 23:10:41

你必须保持对每个标签的引用。您在Add_Label_Function()中创建的引用是本地的(仅在函数中),因此在该函数退出时将被垃圾收集。这是我坐过的节目。它通过将按钮添加到字典中来保持对按钮的引用。请注意,使用按钮和grid.forget()代替标签和破坏,但原则是相同的。

代码语言:javascript
复制
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()
票数 1
EN

Stack Overflow用户

发布于 2020-07-19 10:28:44

用途:

代码语言:javascript
复制
 global My_Label_X 

使标签作为变量可用,仅此而已

对回答的人来说,更简单;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35611795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档