-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwidgets.py
More file actions
37 lines (27 loc) · 1.48 KB
/
Copy pathwidgets.py
File metadata and controls
37 lines (27 loc) · 1.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import tkinter
import tkinter.ttk
import tkinter.tix
class EditableTreeview(tkinter.ttk.Treeview):
def __init__(self, *args, **kwargs):
tkinter.ttk.Treeview.__init__(self, selectmode=tkinter.NONE, *args, **kwargs)
self.widget = kwargs.pop('widget', tkinter.Entry(font=('Arial', 12)))
# self.bind('<Button-1>', self.callback)
self.bind('<Double-Button-1>', self.edit_row)
self.bind('<Button-3>', self.edit_row)
def edit_row(self, event):
if self.identify_region(event.x, event.y) == 'cell':
selected_item = self.focus()
column = int(self.identify_column(event.x)[1:])-1
row = self.item(selected_item)
if column >= 2:
self.widget.delete(0, tkinter.END)
self.widget.insert(tkinter.END, row['values'][column])
self.widget.place(x=event.x+self.winfo_rootx(), y=event.y+80)
self.widget.focus_set()
self.widget.select_range(0, tkinter.END)
# self.widget.bind('<Enter>', lambda event: self.update_data(self.widget, row, column))
# self.widget.bind('<Return>', lambda event: self.update_data(self.widget, row, column))
self.widget.bind('<Leave>', lambda event: self.update_data(self.widget, row['values'][0], column))
def update_data(self, widget, row, column):
self.event_generate('<<EditableTreeviewEdited>>', when='tail', x=column, y=row)
widget.place_forget()