I can not get it to run. S "max(01)*" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > hello. > > i wrote a very simple tkinter demo program that uses menus, buttons, > labels, entries, frames and secondary toplevels. > > it is a python version of a java program made by a colleague. > > the user can create ("Scrivi") a record with his second name, first name > and date of birth, save ("Salva") the record to a file or read in > ("Leggi") a previously created file. "Annulla" is to cancel. "Chiudi" is > to close. > > i also used try-except for checking for invalid files. > > only one menu is real ("File"), the others are for future use. > > i'd like to hear your suggestions and comments for improving it. > > i recently learned tkiner from stephen ferg's website and reading the > tk8.4 widget demo programs. > > one thing i still cannot do is to make the primary window and the > secondary aware of each other (so avoid that a second instance of a > secondary window can be generated if an instance still exists, for > example). > > so, here it is folks: > > ---cut here--- > > from Tkinter import * > > class MiaApp: > def __init__(self, genitore): > > self.MioGenitore = genitore > > fonte = ("Helvetica", "12") > > self.campi = ["Cognome", "Nome" , "Data di nascita"] > > quadro_grande = Frame(genitore) > quadro_grande.pack(expand = YES, fill = BOTH) > > quadro_menu = Frame(quadro_grande) > quadro_menu.configure( > bd = 1, > relief = RAISED > ) > quadro_menu.pack(side = TOP, fill = X) > > pm_file = Menubutton(quadro_menu) > pm_file.configure(text = "File") > pm_file.pack(side = LEFT) > > m_file = Menu(pm_file) > pm_file.configure(menu = m_file) > m_file.configure(tearoff = NO) > m_file.add_command( > label = "Scrivi", > command = self.premuto_scrivi > ) > m_file.add_command( > label = "Leggi", > command = self.premuto_leggi > ) > m_file.add_separator() > m_file.add_command( > label = "Chiudi", > command = genitore.destroy > ) > > pm_mod = Menubutton(quadro_menu) > pm_mod.configure(text = "Modifica") > pm_mod.pack(side = LEFT) > > pm_aiuto = Menubutton(quadro_menu) > pm_aiuto.configure(text = "?") > pm_aiuto.pack(side = RIGHT) > > msg = Label(quadro_grande) > msg.configure( > font = fonte, > relief = RIDGE, > wraplength = "10c", > justify = LEFT, > text = u"Questo \u00E8 un programma in Python \ > che trae ispirazione da un analogo lavoro del collega \ > G. Renda. Il programma originale era scritto \ > in linguaggio Java, e sfruttava le librerie JFC \ > (\u00ABJava Foundation Class\u00BB, dette anche \ > \u00ABSwing\u00BB); questo invece usa le librerie Tk, \ > mediante il modulo Tkinter." > ) > msg.pack( > side = TOP, > padx = "2m", > pady = "2m" > ) > > quadro_pulsanti = Frame(quadro_grande) > quadro_pulsanti.pack( > side = BOTTOM, > fill = X, > padx = "2m", > pady = "2m" > ) > > scrivi = Button(quadro_pulsanti) > scrivi.configure( > text = "Scrivi", > command = self.premuto_scrivi > ) > scrivi.pack(side = LEFT, expand = YES) > > leggi = Button(quadro_pulsanti) > leggi.configure(text = "Leggi", command = self.premuto_leggi) > leggi.pack(side = LEFT, expand = YES) > > chiudi = Button(quadro_pulsanti) > chiudi.configure(text = "Chiudi", command = genitore.destroy) > chiudi.pack(side = LEFT, expand = YES) > > def premuto_scrivi(self): > InserimentoRecord() > > def premuto_leggi(self): > ConsultazioneRecord() > > class InserimentoRecord(Toplevel): > def __init__(self): > > Toplevel.__init__(self) > > self.titolo = "Inserimento" > self.wm_title(self.titolo) > > quadro_grande = Frame(self) > quadro_grande.pack(expand = YES, fill = BOTH) > > self.quadro_pulsanti = Frame(quadro_grande) > self.quadro_pulsanti.pack( > side = BOTTOM, > fill = X, > padx = "2m", > pady = "2m" > ) > > quadri_ing = [] > self.n = len(miaApp.campi) > self.var = [] > eti = [] > larg_eti = max(map(len, miaApp.campi)) > ing = [] > for i in range(self.n): > quadri_ing.append(None) > self.var.append(None) > ing.append(None) > eti.append(None) > quadri_ing[i] = Frame(quadro_grande) > quadri_ing[i].pack(side = TOP, expand = YES, fill = BOTH) > self.var[i] = StringVar() > eti[i] = Label(quadri_ing[i]) > eti[i].configure( > text = miaApp.campi[i] + ": ", > width = larg_eti, > anchor = E > ) > eti[i].pack(side = LEFT, pady = 5, padx = 10, fill = X) > ing[i] = Entry(quadri_ing[i], textvariable = self.var[i]) > ing[i].pack(side = LEFT, pady = 5, padx = 10, fill = X) > > self.salva = Button(self.quadro_pulsanti) > self.salva.configure( > text = "Salva", > command = self.premuto_salva > ) > self.salva.pack(side = LEFT, expand = YES) > > self.annulla = Button(self.quadro_pulsanti) > self.annulla.configure( > text = "Annulla", > command = self.premuto_annulla > ) > self.annulla.pack(side = LEFT, expand = YES) > > def premuto_salva(self): > import tkFileDialog > import pickle > > dati = [] > for i in range(self.n): > dati.append(None) > dati[i] = self.var[i].get() > > nomefile = tkFileDialog.asksaveasfilename( > defaultextension = ".ana", > filetypes = [ > ("Record anagrafici", "*.ana"), > ("Tutti i file", "*") > ] > ) > > if nomefile: > f = open(nomefile, "w") > pickle.dump(dati, f) > f.close() > > self.destroy() > > def premuto_annulla(self): > self.destroy() > > class ConsultazioneRecord(Toplevel): > def __init__(self): > > import tkFileDialog > > nomefile = tkFileDialog.askopenfilename( > defaultextension = ".ana", > filetypes = [ > ("Record anagrafici", "*.ana"), > ("Tutti i file", "*") > ] > ) > > if nomefile: > > try: ### Il metodo 'pickle.load' potrebbe generare una > ### eccezione se l'utente cerca di aprire un file > ### non del formato giusto > > Toplevel.__init__(self) > > self.titolo = "Consultazione" > self.wm_title(self.titolo) > > quadro_grande = Frame(self) > quadro_grande.pack(expand = YES, fill = BOTH) > > eti_rec = Label(quadro_grande) > eti_rec.configure( > text = "Record: " + nomefile, > relief = RIDGE > ) > eti_rec.pack( > side = TOP, > fill = X, > padx = "5m", > pady = "5m" > ) > > self.quadro_pulsanti = Frame(quadro_grande) > self.quadro_pulsanti.pack( > side = BOTTOM, > fill = X, > padx = "2m", > pady = "2m" > ) > > import pickle > > quadri_eti = [] > eti_campi = [] > eti_val = [] > larg_eti_campi = max(map(len, miaApp.campi)) > f = open(nomefile, "r") > > valori = pickle.load(f) ### Potrebbe generare una > ### eccezione 'KeyError' > > larg_eti_val = max(map(len, valori)) > n = len(miaApp.campi) > for i in range(n): > quadri_eti.append(None) > eti_campi.append(None) > eti_val.append(None) > quadri_eti[i] = Frame(quadro_grande) > quadri_eti[i].pack(side = TOP, expand = YES, fill = BOTH) > eti_campi[i] = Label( > quadri_eti[i], > text = miaApp.campi[i] + ": ", > width = larg_eti_campi, > anchor = E > ) > eti_campi[i].pack(side = LEFT, pady = 5, padx = 10, fill = X) > eti_val[i] = Label( > quadri_eti[i], > text = valori[i], > anchor = W, > width = larg_eti_val, > relief = SUNKEN > ) > eti_val[i].pack(side = LEFT, pady = 5, padx = 10, fill = X) > self.chiudi = Button(self.quadro_pulsanti) > self.chiudi.configure( > text = "Chiudi", > command = self.premuto_chiudi > ) > self.chiudi.pack(side = LEFT, expand = YES) > > except KeyError: ### Eventualmente generato da > ### 'pickle.load()' > > import tkMessageBox > > tkMessageBox.showwarning( > "Bad input", > "Illegal values, please try again" > ) > self.destroy() > > f.close() > > def premuto_chiudi(self): > self.destroy() > > radice = Tk() > radice.wm_title("Versione Python di un programma Java di G. Renda") > radice.wm_iconname("giuseppe") > radice.minsize(400, 300) > miaApp = MiaApp(radice) > radice.mainloop()
-- http://mail.python.org/mailman/listinfo/python-list