Skip to content

Commit da83404

Browse files
basic code
0 parents  commit da83404

File tree

5 files changed

+158
-0
lines changed

5 files changed

+158
-0
lines changed

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
__pycache__
2+
/.settings
3+
/.pydevproject
4+
/.project
5+
/.vscode

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# AI Enhanced Translator

core/__init__.py

Whitespace-only changes.

core/worker.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import threading
2+
3+
class CWorker(threading.Thread):
4+
def __init__(self, events):
5+
super().__init__(daemon=True)
6+
self._events = events
7+
self._forceTranslateEvent = threading.Event()
8+
return
9+
10+
def run(self):
11+
oldText = None
12+
while True:
13+
isForceTranslate = self._forceTranslateEvent.wait(5)
14+
if isForceTranslate:
15+
self._forceTranslateEvent.clear()
16+
17+
text = self._events.text()
18+
if (text == oldText) and (not isForceTranslate): continue # Not changed
19+
20+
try:
21+
self._performTranslate(text, force=isForceTranslate)
22+
except Exception as e:
23+
print(e)
24+
continue
25+
return
26+
27+
def forceTranslate(self):
28+
self._forceTranslateEvent.set()
29+
return
30+
31+
def _performTranslate(self, text, force=False):
32+
try:
33+
self._events.startTranslate(force)
34+
fastText = self._fastTranslate(text)
35+
self._events.fastTranslated(fastText)
36+
if not force: return
37+
38+
fullText = self._fullTranslate(text, fastTranslation=fastText)
39+
self._events.fullTranslated(fullText)
40+
except Exception as e:
41+
self._events.error(e)
42+
finally:
43+
self._events.endTranslate()
44+
return
45+
46+
def _fastTranslate(self, text):
47+
return "Fast translation: " + text + "\n"
48+
49+
def _fullTranslate(self, text, fastTranslation=None):
50+
return "Full translation: " + text + "\n"

main.py

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
'''
2+
simple tkinter app with an input text box
3+
each 5 seconds thread will check if the input text box is changed
4+
if changed, it will process the input text and show the result in the output text box
5+
if user press ctrl+enter, it will force to process the input text and show the results in several output text boxes, per processing stage
6+
'''
7+
import tkinter as tk
8+
import tkinter.scrolledtext as tkst
9+
from core.worker import CWorker
10+
11+
class App(tk.Frame):
12+
def __init__(self, master=None):
13+
super().__init__(master)
14+
self._master = master
15+
# set global font
16+
self._master.option_add("*Font", ("Arial", 16))
17+
self._master.title("AI Enhanced Translator")
18+
self._UI_init()
19+
self.pack()
20+
21+
self._worker = CWorker(self)
22+
self._worker.start()
23+
return
24+
25+
def _UI_inputArea(self, owner):
26+
label = tk.Label(owner, text="Input Text:", justify="left", anchor="w")
27+
label.pack(side="top", fill=tk.X)
28+
29+
self._inputText = tkst.ScrolledText(owner)
30+
self._inputText.pack(side="top", fill=tk.BOTH, expand=tk.YES)
31+
self._inputText.bind("<Control-Return>", self.onForceTranslate)
32+
return
33+
34+
def UITextFor(self, text):
35+
return text
36+
37+
def _UI_outputArea(self, owner):
38+
# fast translation
39+
label = tk.Label(owner, text=self.UITextFor("Fast Translation:"), justify="left", anchor="w")
40+
label.pack(side="top", fill=tk.X)
41+
42+
self._fastOutputText = tkst.ScrolledText(owner)
43+
self._fastOutputText.pack(side="top", fill=tk.BOTH, expand=tk.YES)
44+
45+
# full translation
46+
label = tk.Label(owner, text=self.UITextFor("Full Translation:"), justify="left", anchor="w")
47+
label.pack(side="top", fill=tk.X)
48+
49+
self._fullOutputText = tkst.ScrolledText(owner)
50+
self._fullOutputText.pack(side="top", fill=tk.BOTH, expand=tk.YES)
51+
return
52+
53+
def _UI_init(self):
54+
# Two vertical frames for input and output
55+
leftFrame = tk.Frame(self._master)
56+
leftFrame.pack(side="left", fill=tk.BOTH, expand=tk.YES)
57+
self._UI_inputArea(leftFrame)
58+
59+
rightFrame = tk.Frame(self._master)
60+
rightFrame.pack(side="right", fill=tk.BOTH, expand=tk.YES)
61+
62+
self._UI_outputArea(rightFrame)
63+
return
64+
65+
def onForceTranslate(self, event):
66+
self._worker.forceTranslate()
67+
return
68+
69+
# events for worker
70+
def text(self): return self._inputText.get("1.0", tk.END)
71+
72+
def startTranslate(self, force=False):
73+
# set output text to "Processing..."
74+
self._fastOutputText.delete("1.0", tk.END)
75+
self._fastOutputText.insert(tk.END, self.UITextFor("Processing..."))
76+
if force:
77+
self._fullOutputText.delete("1.0", tk.END)
78+
self._fullOutputText.insert(tk.END, self.UITextFor("Processing..."))
79+
return
80+
81+
def fastTranslated(self, text):
82+
self._fastOutputText.delete("1.0", tk.END)
83+
self._fastOutputText.insert(tk.END, text)
84+
return
85+
86+
def fullTranslated(self, text):
87+
self._fullOutputText.delete("1.0", tk.END)
88+
self._fullOutputText.insert(tk.END, text)
89+
return
90+
91+
def error(self, e):
92+
self._fastOutputText.delete("1.0", tk.END)
93+
self._fullOutputText.insert(tk.END, "Error: " + str(e) + "\n")
94+
return
95+
96+
def endTranslate(self):
97+
return
98+
99+
if '__main__' == __name__:
100+
root = tk.Tk()
101+
app = App(master=root)
102+
app.mainloop()

0 commit comments

Comments
 (0)