1
1
#!/usr/bin/env python3
2
2
# -*- coding: utf-8 -*-
3
3
import tkinter as tk
4
+ from tkinter import ttk
4
5
import tkinter .scrolledtext as tkst
5
6
from core .worker import CWorker
6
7
# set up logging
16
17
dotenv .load_dotenv ('.env.local' , override = True )
17
18
# main app
18
19
class App (tk .Frame ):
19
- def __init__ (self , master = None ):
20
+ def __init__ (self , master , languages , currentLanguage = None ):
20
21
super ().__init__ (master )
21
22
self ._master = master
23
+ self ._languages = languages
24
+ self ._currentLanguage = currentLanguage or self ._languages .keys ()[0 ]
22
25
# set global font
23
26
self ._master .option_add ("*Font" , ("Arial" , 16 ))
24
27
self ._master .title ("AI Enhanced Translator" )
@@ -46,12 +49,27 @@ def clear(event): self._inputText.delete("1.0", tk.END)
46
49
def UITextFor (self , text ):
47
50
return text
48
51
52
+ def _UI_languageSelection (self , owner ):
53
+ # target language selection via combobox, stick to top right corner
54
+ self ._language = ttk .Combobox (
55
+ owner , state = "readonly" , width = 20 ,
56
+ values = list (self ._languages .values ())
57
+ )
58
+ self ._language .pack (side = "top" , anchor = "ne" , padx = 5 , pady = 5 )
59
+ self ._language .bind ("<<ComboboxSelected>>" , self .onSelectLanguage )
60
+ try :
61
+ self ._language .set ('Slovak' )
62
+ except tk .TclError :
63
+ pass
64
+ return
65
+
49
66
def _UI_outputArea (self , owner ):
67
+ self ._UI_languageSelection (owner )
50
68
# fast translation
51
69
label = tk .Label (owner , text = self .UITextFor ("Fast Translation:" ), justify = "left" , anchor = "w" )
52
70
label .pack (side = "top" , fill = tk .X )
53
71
54
- self ._fastOutputText = tkst .ScrolledText (owner , height = 5 )
72
+ self ._fastOutputText = tkst .ScrolledText (owner , height = 15 )
55
73
self ._fastOutputText .pack (side = "top" , fill = tk .BOTH , expand = tk .YES )
56
74
57
75
# full translation
@@ -79,7 +97,11 @@ def onForceTranslate(self, event):
79
97
return 'break' # prevent default action
80
98
81
99
# events for worker
82
- def text (self ): return self ._inputText .get ("1.0" , tk .END )
100
+ def userInput (self ):
101
+ currentLanguageCode = self ._currentLanguage
102
+ currentLanguage = self ._languages [currentLanguageCode ]
103
+ language = {'code' : currentLanguageCode , 'name' : currentLanguage }
104
+ return self ._inputText .get ("1.0" , tk .END ), language
83
105
84
106
def startTranslate (self , force = False ):
85
107
# set output text to "Processing..."
@@ -106,10 +128,24 @@ def error(self, e):
106
128
def endTranslate (self ):
107
129
return
108
130
109
- # TODO: language selection
110
- def language (self ): return {'code' : 'sk' , 'name' : 'Slovak' }
131
+ def onSelectLanguage (self , event ):
132
+ language = self ._language .get ()
133
+ code = next ((code for code , name in self ._languages .items () if name == language ), None )
134
+ if code is None : return
135
+
136
+ self ._currentLanguage = code
137
+ # TODO: translate UI?
138
+ return
111
139
112
140
if '__main__' == __name__ :
113
- root = tk .Tk ()
114
- app = App (master = root )
141
+ app = App (
142
+ master = tk .Tk (),
143
+ # TODO: load languages from config
144
+ languages = {
145
+ 'sk' : 'Slovak' ,
146
+ 'en' : 'English' ,
147
+ 'de' : 'German' ,
148
+ },
149
+ currentLanguage = 'sk'
150
+ )
115
151
app .mainloop ()
0 commit comments