very simple tkinter demo program
Samantha
samantha7395 at hotmail.com
Sun Apr 10 13:35:54 EDT 2005
Thanks that worked.
S
"max(01)*" <max2 at fisso.casa> wrote in message
news:oE76e.1206995$35.44444963 at news4.tin.it...
> Samantha wrote:
>> I can not get it to run.
>> S
>
> sorry about that. baybe it is a conflict between tabstop width in my
> editor and in my newsreader.
>
> i substituted tabs with spaces and i hope now you can run it.
>
> bye
>
> macs
>
> ----cuthere----
>
> 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()
More information about the Python-list
mailing list