wxpython/lingvigilo.py
author viric@llimona
Thu, 18 May 2006 22:59:47 +0200
changeset 0 6371497b4e53
permissions -rwxr-xr-x
Init from svn. The wxpython is the final one.
viric@0
     1
#!/usr/bin/python
viric@0
     2
# -*- coding: utf-8 -*-
viric@0
     3
viric@0
     4
import sys,time,random,string,MySQLdb,re
viric@0
     5
from wxPython.wx import *
viric@0
     6
viric@0
     7
# Configuració
viric@0
     8
legi_el = 'mysql'
viric@0
     9
viric@0
    10
# Conf - mysql
viric@0
    11
database = 'lingvigilo'
viric@0
    12
dbuser = 'lingvigilouser'
viric@0
    13
dbpass = 'carrinclo'
viric@0
    14
dbtable_vortoj = 'vortoj_ru_ca'
viric@0
    15
dbtable_frazoj = 'frazoj_ru_ca'
viric@0
    16
viric@0
    17
# Conf - fitxer
viric@0
    18
dbasefile = 'vortoj-ru-ca.txt'
viric@0
    19
frazodosiero = 'frazoj.txt'
viric@0
    20
frazoj_al = 'mysql'
viric@0
    21
viric@0
    22
# Si s'especifica fitxer, l'origen és el fitxer.
viric@0
    23
if (len(sys.argv) > 1):
viric@0
    24
	dbasefile = sys.argv[1]
viric@0
    25
	legi_el = 'file'
viric@0
    26
viric@0
    27
def StringForSQL(str):
viric@0
    28
	return re.sub(r"'",r"\'", str)
viric@0
    29
viric@0
    30
# Prendre les paraules d'una base de dades MySQL
viric@0
    31
def getMySQL():
viric@0
    32
	db = MySQLdb.connect(host='vicerveza',user=dbuser,passwd=dbpass,
viric@0
    33
		db=database)
viric@0
    34
	cursor = db.cursor()
viric@0
    35
	cursor.execute("SELECT * FROM "+dbtable_vortoj)
viric@0
    36
	res_vortoj = cursor.fetchall()
viric@0
    37
	res_vortoj_unicode = []
viric@0
    38
	for vorto in res_vortoj:
viric@0
    39
		vorto_vorto = unicode(vorto[1],'utf8')
viric@0
    40
		vorto_tipo = unicode(vorto[2],'utf8')
viric@0
    41
		vorto_traduko = unicode(vorto[3],'utf8')
viric@0
    42
		
viric@0
    43
		# Paràmetres opcionals
viric@0
    44
		if vorto[4] == None:
viric@0
    45
			vorto_param1 = ''
viric@0
    46
		else:
viric@0
    47
			vorto_param1 = unicode(vorto[4],'utf8')
viric@0
    48
viric@0
    49
		if vorto[5] == None:
viric@0
    50
			vorto_param2 = ''
viric@0
    51
		else:
viric@0
    52
			vorto_param2 = unicode(vorto[5],'utf8')
viric@0
    53
viric@0
    54
		res_vortoj_unicode.append(
viric@0
    55
			(vorto_vorto, vorto_tipo, vorto_traduko,
viric@0
    56
			vorto_param1, vorto_param2))
viric@0
    57
	db.close()
viric@0
    58
	return res_vortoj_unicode
viric@0
    59
viric@0
    60
# Prendre les paraules d'un fitxer
viric@0
    61
def getFile():
viric@0
    62
	dbase = open(dbasefile,"r")
viric@0
    63
viric@0
    64
	lines = dbase.readlines()
viric@0
    65
	dbase.close()
viric@0
    66
viric@0
    67
	res_vortoj = []
viric@0
    68
	for line in lines:
viric@0
    69
		line = line.rstrip('\n')
viric@0
    70
		vortoj = string.split(unicode(line.rstrip('\n'),'utf8'),'\t')
viric@0
    71
		res_vortoj.append(vortoj)
viric@0
    72
viric@0
    73
	return res_vortoj
viric@0
    74
viric@0
    75
if legi_el == 'dosiero':
viric@0
    76
	print "Legante vortojn el dosiero..."
viric@0
    77
	vortoj = getFile()
viric@0
    78
elif legi_el == 'mysql':
viric@0
    79
	print "Legante vortojn el MySQLa datumbazo..."
viric@0
    80
	vortoj = getMySQL()
viric@0
    81
viric@0
    82
print "Legitaj", len(vortoj), "vortoj."
viric@0
    83
viric@0
    84
def AldoniFrazonDosieren(vorto,teksto):
viric@0
    85
	outfile = open(frazodosiero,"a")
viric@0
    86
viric@0
    87
	lineout = vorto + "\t" + teksto +"\n"
viric@0
    88
	outfile.write(lineout.encode('utf8'))
viric@0
    89
	
viric@0
    90
	outfile.close()
viric@0
    91
viric@0
    92
def AldoniFrazonDatumbazen(vorto,teksto):
viric@0
    93
	db = MySQLdb.connect(host='vicerveza',user=dbuser,passwd=dbpass,
viric@0
    94
		db=database)
viric@0
    95
	cursor = db.cursor()
viric@0
    96
	cursor.execute("INSERT INTO "+
viric@0
    97
		StringForSQL(dbtable_frazoj)+
viric@0
    98
		" (vorto, frazo) VALUES('%s', '%s');" %
viric@0
    99
		(StringForSQL(vorto.encode('utf8')),
viric@0
   100
		StringForSQL(teksto.encode('utf8'))))
viric@0
   101
	db.close()
viric@0
   102
viric@0
   103
def AldoniFrazon(vorto,teksto):
viric@0
   104
	if (frazoj_al == 'mysql'):
viric@0
   105
		AldoniFrazonDatumbazen(vorto,teksto)
viric@0
   106
	elif (frazoj_al == 'dosiero'):
viric@0
   107
		AldoniFrazonDosieren(vorto,teksto)
viric@0
   108
viric@0
   109
viric@0
   110
viric@0
   111
#def LoopFunction():
viric@0
   112
#	index = random.randint(0, len(vortoj)-1)
viric@0
   113
#	vorto = vortoj[index][0]
viric@0
   114
#	teksto = askstring("Frazilon", "Skribu frazon por vorto '%s'" % vorto)
viric@0
   115
#	if teksto == None:
viric@0
   116
#		print 'Fi del programa'
viric@0
   117
#		sys.exit()
viric@0
   118
#	AldoniFrazonDatumbazen(vorto, teksto)
viric@0
   119
viric@0
   120
def Senakcentigi(vorto):
viric@0
   121
	return re.sub(r"'",r"", vorto)
viric@0
   122
viric@0
   123
class main_window(wxFrame):
viric@0
   124
	def __init__(self, parent, id, title):
viric@0
   125
		wxFrame.__init__(self, parent, -1, title, size=(200,100),
viric@0
   126
			style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE)
viric@0
   127
viric@0
   128
		# Variables de la classe
viric@0
   129
		# (sino no tira)
viric@0
   130
		self.vorto = ("", "")
viric@0
   131
viric@0
   132
		# Sizer vertical
viric@0
   133
		self.topsizer = wxBoxSizer(wxVERTICAL)
viric@0
   134
viric@0
   135
		# Agefim la pregunta i la textbox
viric@0
   136
		self.label = wxStaticText(self, -1,
viric@0
   137
			label="Skribu frazon per vorto\n 'provo'",
viric@0
   138
			style=wxALIGN_CENTER)
viric@0
   139
		self.textbox = wxTextCtrl(self, -1)
viric@0
   140
		self.topsizer.Add(self.label, 1, wxALIGN_CENTER,
viric@0
   141
			wxALL, 10)
viric@0
   142
		self.topsizer.Add(self.textbox, 0, wxEXPAND, wxALL, 10)
viric@0
   143
viric@0
   144
		# Afegim botons
viric@0
   145
		self.buttonsizer = wxBoxSizer(wxHORIZONTAL)
viric@0
   146
		okid = wxNewId()
viric@0
   147
		cancelid = wxNewId()
viric@0
   148
		helpid = wxNewId()
viric@0
   149
		okbutton = wxButton(self, okid, "Konservu")
viric@0
   150
		# Botó per defecte (resposta a l'intro)
viric@0
   151
		okbutton.SetDefault()
viric@0
   152
		self.buttonsizer.Add(okbutton, 0, wxALL, 10)
viric@0
   153
		cancelbutton = wxButton(self, cancelid, "Forgesu")
viric@0
   154
		self.buttonsizer.Add(cancelbutton, 0, wxALL, 10)
viric@0
   155
		helpbutton = wxButton(self, helpid, "Helpo")
viric@0
   156
		self.buttonsizer.Add(helpbutton, 0, wxALL, 10)
viric@0
   157
		self.topsizer.Add(self.buttonsizer, 0, wxALIGN_CENTER)
viric@0
   158
viric@0
   159
		# EVENTS DE BOTONS
viric@0
   160
		EVT_BUTTON(okbutton, okid, self.KonservuFrazon )
viric@0
   161
		EVT_BUTTON(cancelbutton, cancelid, self.ForgesuFrazon )
viric@0
   162
		EVT_BUTTON(helpbutton, helpid, self.MontruHelpon )
viric@0
   163
viric@0
   164
		# Key events
viric@0
   165
		EVT_KEY_DOWN(self,self.KeyManager)
viric@0
   166
viric@0
   167
		# Activem el sizer principal
viric@0
   168
		self.SetSizer(self.topsizer)
viric@0
   169
		# Mida mínima de finestra.
viric@0
   170
		self.topsizer.SetSizeHints(self)
viric@0
   171
viric@0
   172
		# Focus al text
viric@0
   173
		self.textbox.SetFocus()
viric@0
   174
		
viric@0
   175
		self.Show(true)
viric@0
   176
viric@0
   177
		# Actualitzem paraula.
viric@0
   178
		self.RenovuVorton()
viric@0
   179
viric@0
   180
	def RenovuVorton(self):
viric@0
   181
		index = random.randint(0, len(vortoj)-1)
viric@0
   182
		
viric@0
   183
		self.vorto = vortoj[index]
viric@0
   184
		#print("Elektita vorto: %s" % self.vorto[0])
viric@0
   185
		self.label.SetLabel("Skribu frazon per vorto\n'%s'" %
viric@0
   186
			Senakcentigi(self.vorto[0]))
viric@0
   187
viric@0
   188
viric@0
   189
	#	if teksto == None:
viric@0
   190
	#		print 'Fi del programa'
viric@0
   191
	#		sys.exit()
viric@0
   192
	#	AldoniFrazonDatumbazen(vorto, teksto)
viric@0
   193
viric@0
   194
	def MontruHelpon(self,event):
viric@0
   195
		mesagxo = ("Vorto: " + self.vorto[0] + "\n" +
viric@0
   196
			"Tipo: " + self.vorto[1] + "\n" +
viric@0
   197
			"Traduko: " + self.vorto[2] + "\n")
viric@0
   198
viric@0
   199
		if (self.vorto[1] == "verb"):
viric@0
   200
			mesagxo = (mesagxo + "Aspekto: " + self.vorto[3] + "\n")
viric@0
   201
			aspekto = self.vorto[3]
viric@0
   202
			if (self.vorto[3] == u"нсв"):
viric@0
   203
				aliaaspekto = u"Св"
viric@0
   204
			else:
viric@0
   205
				aliaaspekto = u"Нсв"
viric@0
   206
			mesagxo = (mesagxo + aliaaspekto + ": " +
viric@0
   207
				self.vorto[4] + "\n")
viric@0
   208
viric@0
   209
		wxMessageDialog(self, mesagxo, "Helpo", style=wxOK).ShowModal()
viric@0
   210
viric@0
   211
	def KonservuFrazon(self,event):
viric@0
   212
		# No guardem cadenes buides
viric@0
   213
		if (self.textbox.GetValue() != ""):
viric@0
   214
			AldoniFrazon(Senakcentigi(self.vorto[0]),
viric@0
   215
				self.textbox.GetValue())
viric@0
   216
			self.RenovuVorton()
viric@0
   217
			self.textbox.Clear()
viric@0
   218
viric@0
   219
	def ForgesuFrazon(self,event):
viric@0
   220
		self.textbox.Clear()
viric@0
   221
		self.RenovuVorton()
viric@0
   222
viric@0
   223
	def KeyManager(self,event):
viric@0
   224
		key = event.GetKeyCode()
viric@0
   225
		if (key == WXK_ESCAPE):
viric@0
   226
			print("Elirante...")
viric@0
   227
			sys.exit()
viric@0
   228
		elif (key == WXK_TAB):
viric@0
   229
			# Igual que ForgesuFrazon(self,event)
viric@0
   230
			# Puc fer-ho passant un event buit?
viric@0
   231
			self.ForgesuFrazon(0)
viric@0
   232
		elif (key == WXK_F1):
viric@0
   233
			self.MontruHelpon(0)
viric@0
   234
viric@0
   235
class App(wxApp):
viric@0
   236
	def OnInit(self):
viric@0
   237
		frame = main_window(None, -1, "Lingvigilo")
viric@0
   238
		self.SetTopWindow(frame)
viric@0
   239
		return true
viric@0
   240
viric@0
   241
#def DemandiAlUzanto():
viric@0
   242
viric@0
   243
# Main program
viric@0
   244
app=App(0)
viric@0
   245
app.MainLoop()