【发布时间】:2020-03-10 10:07:28
【问题描述】:
我试图在 tkinter 中重新创建一个小版本的 trello。现在我卡住了当我想以不同的顺序删除帧时遇到问题。例如:我单击按钮,如果我删除一切正常,则会生成一个新框架。如果我创建 3 个框架,我必须按照创建它们的顺序删除它们。所以我认为我的问题在于弹出功能,但我不知道如何手动访问它们。当我将 pop 函数更改为 (1) 时,我必须首先删除第二个创建而不是第一个。 代码如下:
from tkinter import *
class Window:
def __init__(self, width, height):
self.root = Tk()
self.width = width
self.height = height
self.root.geometry(width + "x" + height)
class Frames:
def __init__(self):
self.l = Frame(window.root, bg="red", height=300, width=300, relief="sunken")
self.l.place(relwidth=0.3, relheight=0.3)
self.deleteB = Button(self.l, text="X", command=self.delete_frame, bg="blue")
self.deleteB.place(rely=0, relx=0.92)
self.addB = Button(self.l, text="Add", command=self.add_note, bg="blue")
self.addB.place(rely=0, relx=0.65)
def delete_frame(self):
self.l.pack()
self.l.pack_forget()
self.l.destroy()
frames.pop()
def add_note(self):
self.note_Label = Label(self.l, text="Clean the room")
self.note_Label.pack(padx=20, pady=10)
self.delete_Note = Button(self.note_Label, text="X", command=self.del_Note)
self.delete_Note.pack(padx=5, pady=5)
def del_Note(self):
self.note_Label.pack_forget()
self.note_Label.destroy()
class Note:
def __init__(self):
pass
class DragNDrop:
def __init__(self):
pass
def make_draggable(self, widget):
widget.bind("<Button-1>", self.on_drag_start)
widget.bind("<B1-Motion>", self.on_drag_motion)
def on_drag_start(self, event):
widget = event.widget
widget._drag_start_x = event.x
widget._drag_start_y = event.y
def on_drag_motion(self, event):
widget = event.widget
x = widget.winfo_x() - widget._drag_start_x + event.x
y = widget.winfo_y() - widget._drag_start_y + event.y
widget.place(x=x, y=y)
class Buttons:
def __init__(self):
self.button = Button(window.root, width=20, height=20, bg="blue", command=self.add_frames)
self.button.pack()
def add_frames(self):
frames.append(Frames())
print(frames)
window = Window("800", "600")
frames = []
drag = DragNDrop()
button = Buttons()
while True:
for i in frames:
drag.make_draggable(i.l)
window.root.update()
如果有人有想法或解决方法,很高兴知道。 此外,我还有另一个想法,而不是销毁它们,我可以将它们隐藏起来,但最终会使程序在某些时候变得非常慢。
这是错误:_tkinter.TclError: bad window path name ".!frame2"
【问题讨论】:
-
发布你得到的错误
-
这里:_tkinter.TclError: 错误的窗口路径名“.!frame2”
标签: python-3.x user-interface tkinter tk