首页 > 解决方案 > 尝试关闭然后重新打开 Tkinter 'Frame' 小部件时出错

问题描述

我想打开一个带有列表框小部件、“选择”按钮和“关闭”按钮的框架容器小部件。目的是允许从列表框小部件可用的所有项目的主列表创建自定义列表。框架/列表框小部件将需要多次访问,但它应该只在需要时弹出。

我已经在“关闭”按钮上尝试了 place.forget 方法,但进一步尝试重新打开小部件会创建框架及其子小部件的其他实例。我也尝试了 place.destroy 方法,但在尝试重新打开框架小部件时出错。

from tkinter import *
from tkinter import ttk

root = Tk() 
root.geometry('1080x768')
mainCanvas = Canvas(root, height=768,width=1080)
mainCanvas.pack()
popup = Frame(root, bd=3, relief=RAISED)

def addNew(): 
    popup.place(relx=0.5, rely=0.2, anchor=CENTER)

    scrollbar = Scrollbar(popup, orient=VERTICAL)   
    Lb1 = Listbox(popup, height=3, yscrollcommand=scrollbar.set)
    scrollbar.config(command=Lb1.yview)
    scrollbar.pack(side=RIGHT, fill=Y)
    Lb1.insert(1, "item one")
    Lb1.insert(2, "item two")
    Lb1.pack()

    addbutton = Button(popup, text="Choose list item")
    addbutton.pack()

    cancelbutton = Button(popup, text="Done", command=popup.destroy)
    cancelbutton.pack()

addItem = Button(mainCanvas, text="+", width=3, height=1, 
command=addNew)
addItem.grid(row=20, column=0) 

root.mainloop()

Tkinter 回调 Traceback 中的异常(最近一次调用最后一次):
文件“C:\Python27\lib\lib-tk\Tkinter.py”,第 1542 行,调用 返回 self.func(*args) 文件“C:\Users\ Home\Desktop\stackoverflow.py",第 11 行,在 addNew popup.place(relx=0.5,reli=0.2,anchor=CENTER) 文件“C:\Python27\lib\lib-tk\Tkinter.py”,第 1991 行, 在 place_configure + self._options(cnf, kw)) TclError: bad window path name ".46913176"

标签: pythontkinter

解决方案


我解决了!我在 addNew() 函数中移动了弹出框声明并使用了 popup.destroy 方法,瞧!感谢您的反馈!


推荐阅读