首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有一种方法可以删除Tkinter上for循环中的每个按钮?

有没有一种方法可以删除Tkinter上for循环中的每个按钮?
EN

Stack Overflow用户
提问于 2022-02-20 10:21:14
回答 1查看 163关注 0票数 0

我有一个for循环,生成4个按钮,每个按钮都指向一个函数。此函数需要从清除页面上的所有按钮开始。你能帮个忙吗?

代码语言:javascript
运行
复制
x_position = 160
for i in range (5,9):
      u = urllib.request.urlopen(actorimages[i])
      raw_data = u.read()
      u.close()
      
      im = Image.open(BytesIO(raw_data))
      im = im.resize((120,180),Image.ANTIALIAS)
      photo = ImageTk.PhotoImage(im)
      
      photo1button = tk.Button(image=photo,width=120,height=180,compound="c",
                               borderwidth = 0,
                               highlightthickness = 0,
                               command = lambda i=i, b=photo1button: actorInfo(i,canvas,b),
                               relief = "flat")
      photo1button.image = photo
      photo1button.place(x=x_position,y=351)
  
      canvas.create_text(
                x_position, 552,
                text = actorName[i],
                fill = "#ffffff",
                anchor=tk.SW,
                tag = "actorheading",
                font = ("Roboto", int(9.0)))

      x_position += 158
      


def actorInfo(i,canvas,b):
  b.place_forget()
  canvas.delete("actorheading")
EN

回答 1

Stack Overflow用户

发布于 2022-02-20 14:57:39

您可以使用一个列表来存储按钮的所有引用,然后可以通过这个列表删除actorInfo()中的按钮。

代码语言:javascript
运行
复制
buttons = []  # list to store the created buttons
x_position = 160
for i in range (5,9):
      u = urllib.request.urlopen(actorimages[i])
      raw_data = u.read()
      u.close()

      im = Image.open(BytesIO(raw_data))
      im = im.resize((120,180),Image.ANTIALIAS)
      photo = ImageTk.PhotoImage(im)

      photo1button = tk.Button(image=photo,width=120,height=180,compound="c",
                               borderwidth = 0,
                               highlightthickness = 0,
                               command=lambda: actorInfo(canvas),
                               relief = "flat")
      photo1button.image = photo
      photo1button.place(x=x_position,y=351)
      buttons.append(photo1button) # add button to list

      canvas.create_text(
                x_position, 552,
                text = actorName[i],
                fill = "#ffffff",
                anchor=tk.SW,
                tag = "actorheading",
                font = ("Roboto", int(9.0)))

      x_position += 158

def actorInfo(canvas):
    # remove all buttons (note that they are not destroyed) stored in the list
    for b in buttons:
        b.place_forget()
    canvas.delete("actorheading")

请注意,我已经删除了ib参数在actorInfo()中,因为这是不必要的。实际上,您也可以删除i参数。

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

https://stackoverflow.com/questions/71193420

复制
相关文章

相似问题

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