invalid command name Error
Verfasst: Montag 27. Juli 2020, 09:10
Hallo ich habe mir ein kleines Tabellen Widget geschrieben.
In das habe ich auch eine kleine Funktion implementiert die eine Zeile löscht, wenn man darauf doppelklickt.
Leider kommt immer die Meldung das diese Tabelle nicht existiert...
Ich habe unten einen Beispiel Code, könnt ihr mir helfen?
Fehler:
In das habe ich auch eine kleine Funktion implementiert die eine Zeile löscht, wenn man darauf doppelklickt.
Leider kommt immer die Meldung das diese Tabelle nicht existiert...
Ich habe unten einen Beispiel Code, könnt ihr mir helfen?
Code: Alles auswählen
import tkinter as tk
from tkinter import ttk
class Table(ttk.Treeview):
def __init__(self, master, data):
super().__init__(master)
yscrollbar = ttk.Scrollbar(master, orient="vertical", command=self.yview)
yscrollbar.grid(row=0, column=2, sticky="NS")
self.configure(yscrollcommand=yscrollbar.set)
self.headers = data[0]
self.sizes = [int(size) for size in data[1]]
data = data[2:]
column_names = tuple([str(number) for number in range(len(self.headers))])
self["columns"] = column_names
self["show"] = "headings"
for header, size, name in zip(self.headers, self.sizes, column_names):
self.column(name, width=int(size), minwidth=int(size), anchor="w")
self.heading(name, text=header, anchor="w")
for i, column in enumerate(data):
self.insert("", i, text="", values=tuple(column))
self.bind("<Double-1>", self.on_double_click)
def insert_column(self, entries):
data = [entry.get() for entry in entries]
self.insert("", randrange(1000, 10000000), text="", values=tuple(data))
def get_data(self):
data = []
data.append(self.headers)
data.append(self.sizes)
for child in self.get_children():
data.append(self.item(child)["values"])
return data
def on_double_click(self, event):
region = self.identify("region", event.x, event.y)
if region == "heading":
pass
else:
warning = Warning(title="Bestätigung", message=self.item(event.widget.focus())['values'])
if warning.value:
self.delete(event.widget.focus())
class Warning:
def __init__(self, title, message):
self.value = None
self.root = tk.Tk()
self.root.resizable(False, False)
self.root.title(title)
self.root.config(bg="white")
tk.Label(self.root, text="willst du die folgenden Werte wirklich löschen?", bg="white", fg="red").pack()
tk.Label(self.root, text=message, bg="white").pack()
tk.Button(self.root, text="Ja", bg="orange", command=self.yes).pack()
tk.Button(self.root, text="Nein", bg="white", command=self.no).pack()
self.root.mainloop()
def yes(self):
self.value = True
self.root.destroy()
def no(self):
self.value = False
self.root.destroy()
def main():
root = tk.Tk()
table = Table(root, [["Äpfel", "Bananen", "Orangen"], ["60", "60", "60"], ["12", "7", "16"]])
table.grid(row=0, column=1)
if __name__ == "__main__":
main()
Code: Alles auswählen
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
return self.func(*args)
File "beispiel.py", line 46, in on_double_click
self.delete(event.widget.focus())
File "/usr/lib/python3.7/tkinter/ttk.py", line 1273, in focus
return self.tk.call(self._w, "focus", item)
_tkinter.TclError: invalid command name ".!table"
invalid command name ".!table"
while executing
"$w identify row $x $y"
(procedure "ttk::treeview::DoubleClick" line 2)
invoked from within
"ttk::treeview::DoubleClick .!table 52 36 "
(command bound to event)