-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtextarea.py
More file actions
executable file
·80 lines (70 loc) · 2.42 KB
/
Copy pathtextarea.py
File metadata and controls
executable file
·80 lines (70 loc) · 2.42 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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import tkinter as tk
import tkinter.messagebox as msgbox
class TextArea(tk.Text):
def __init__(self, master, **kwargs):
super().__init__(**kwargs)
self.bind_events()
self.master = master
self.config(wrap=tk.WORD)
self.tag_configure('find_match', background="yellow")
self.find_match_index = None
self.find_search_starting_index = 1.0
def bind_events(self):
self.bind("<Control-a>",self.select_all)
self.bind("<Control-c>", self.copy)
self.bind("<Control-v>", self.paste)
self.bind("<Control-x>", self.cut)
self.bind("<Control-y>", self.redo)
self.bind("<Control-z>", self.undo)
def copy(self, event=None):
self.event_generate("<<Control-c>>")
def paste(self, event=None):
self.event_generate("<<Control-v>>")
return "break"
def cut(self, event=None):
self.event_generate("<<Control-x>>")
def redo(self, event=None):
self.event_generate("<<Control-y>>")
return "break"
def undo(self, event=None):
self.event_generate("<<Control-z>>")
return "break"
def select_all(self, event=None):
self.tag_add("sel", 1.0, tk.END)
return "break"
def find(self, text_to_find):
length = tk.IntVar()
idx = self.search(text_to_find, self.find_search_starting_index, tk.END, count=length)
if idx:
self.tag_remove('find_match', 1.0, tk.END)
end = f"{idx}+{length.get()}c"
self.tag_add('find_match',idx,end)
self.see(idx)
self.find_search_starting_index = end
self.find_match_index = idx
else:
if self.find_match_index != 1.0:
if msgbox.askyesno("No More result","No further matches, Repeat from beginning?"):
self.find_search_starting_index = 1.0
self.find_match_index = None
return self.find(text_to_find)
else:
self.find_search_starting_index = 1.0
self.find_match_index = None
self.tag_remove('find_match', 1.0, tk.END)
else:
msgbox.showinfo("No Matches","There is no result.")
def replace_text(self, target, replacement):
if self.find_match_index:
end = f"{self.find_match_index}+{len(target)}c"
self.replace(self.find_match_index, end, replacement)
self.find_search_starting_index = f"{self.find_match_index}linestart"
self.find_match_index = None
def cancel_find_window(self):
self.find_search_starting_index = 1.0
self.find_match_index = None
self.tag_remove('find_match', 1.0, tk.END)
def display_file_contents(self, filepath):
with open(filepath, 'r') as file:
self.delete(1.0, tk.END)
self.insert(1.0, file.read())