-
Notifications
You must be signed in to change notification settings - Fork 0
/
linenumber.py
53 lines (43 loc) · 1.51 KB
/
linenumber.py
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import tkinter as tk
class Linenumber(tk.Text):
def __init__(self,master,textarea,**kwargs):
super().__init__(**kwargs)
self.master = master
self.textarea = textarea
self.num = 1
self.insert(1.0,'1')
self.configure(state="disabled")
self.textarea.bind('<KeyPress>',self.on_key_press)
self.textarea.bind('<Button-1>',self.button1_events)
def on_key_press(self,event):
self.add_number()
def add_number(self):
index = self.textarea.index(tk.END)
line_index = str(index).split('.')[0]
#print(line_index)
line_num = '\n'.join(str(int(no)+1) for no in range(int(line_index)))
width = len(line_index)+1
self.config(state='normal',width=width)
self.delete(1.0,tk.END)
self.insert(1.0,line_num)
self.config(state='disabled')
self.highlight_cursor_pos()
def button1_events(self,event):
self.highlight_cursor_pos()
def highlight_cursor_pos(self):
self.tag_delete('highlight')
cursor_index = self.textarea.index(tk.INSERT)
cursor_line_index = str(cursor_index).split('.')[0]
#print(cursor_line_index)
highlight_start_index = cursor_line_index+'.0'
highlight_end_index = highlight_start_index+'lineend'
self.tag_configure('highlight',background='green')
self.tag_add('highlight',highlight_start_index,highlight_end_index)
def force_update_line(self):
self.add_number()
# window = tk.Tk()
# textarea = tk.Text(window)
# linenum = Linenumber(window,textarea,width=1,fg='white',bg='grey')
# linenum.pack(side='left',fill='y')
# textarea.pack(side='left',fill='both')
# window.mainloop()