Thursday, February 6, 2014

La prima applicazione in Tkinter

Come anticipato, in questo post presento alcuni modi di utilizzo di una libreria grafica come Tkinter, limitatamente ad oggetti semplici come Label (etichette), Entry (input testo) e Button (pulsanti). Non essendo disponibile un widget che assomigli ad una tabella, ho inventato un modo personale per realizzarla. Il testo integrale del programma è riportato di seguito. Pur essendo abbastanza semplice da leggere, preferisco commentare, a beneficio dei meno esperti, pezzo per pezzo come si arriva a costruire un programma come questo.
Per eseguire il programma, potete usare IDLE o un editor più complesso, a vostra discrezione. Fate tranquillamente copia e incolla, potete facilmente eliminare i numeri di linea dalla copia iniziando a selezionare col mouse dal primo carattere effettivo del codice.
Nel prossimo post vi illustrero' pezzo per pezzo la logica di funzionamento di quello che ho scritto. Non ho inserito volutamente commenti nel testo, preferisco descriverlo in modo più verboso nel blog


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#/usr/bin/env python
# -*- coding: utf-8 -*-
# piccolo programma di esempio d'uso della libreria Tkinter
# di Python insieme alla libreria py-swisseph per il calcolo astronomico
# di precisione
import swisseph
import Tkinter

class Applicazione:

    def __init__(self, myProva):

        self.myProva=myProva
        self.myProva.title('Piccola prova di Tkinter nel calcolo astronomico')
        self.frame = Tkinter.Frame(myProva)
        self.frame.grid(row=0, column=0)
        self.titolo = Tkinter.Label(self.frame, text = "Titolo", bg = 'green', fg = 'black')
        self.titolo.grid(row=0, column=0, columnspan=6, sticky = 'we')

        self.lb_anno = Tkinter.Label(self.frame, text='Anno')
        self.lb_anno.grid(row=1, column=0)
        self.lb_mese = Tkinter.Label(self.frame, text='Mese')
        self.lb_mese.grid(row=1, column=1)
        self.lb_giorno = Tkinter.Label(self.frame, text = 'Giorno')
        self.lb_giorno.grid(row=1, column=2 )
        self.lb_ora = Tkinter.Label(self.frame, text='Ora')
        self.lb_ora.grid(row=1, column =3)
        self.lb_minuto = Tkinter.Label(self.frame, text='Minuto')
        self.lb_minuto.grid(row=1, column=4)
        
        self.en_anno = Tkinter.Entry(self.frame, width='14', justify='center')
        self.en_anno.grid(row=2, column=0)
        self.en_mese = Tkinter.Entry(self.frame, width='14', justify='center')
        self.en_mese.grid(row=2, column=1)
        self.en_giorno = Tkinter.Entry(self.frame, width='14', justify='center')
        self.en_giorno.grid(row=2, column=2)
        self.en_ora = Tkinter.Entry(self.frame, width='14', justify='center')
        self.en_ora.grid(row=2, column=3)
        self.en_minuto = Tkinter.Entry(self.frame, width='14', justify='center')
        self.en_minuto.grid(row=2, column=4 )

        self.labelRes1=[]
        labelRes2=[]
        for i in range(4,16):
            for j in range (0,5):
                labelRes2.append(Tkinter.Label(self.frame,
                                               relief='sunken',
                                               text='--------',
                                               anchor='e',
                                               width=15)
                                 )
                labelRes2[-1].grid(row=i,column=j)
            self.labelRes1.append(labelRes2)
            
            labelRes2=[]
                        

        self.bt_calcola = Tkinter.Button(self.frame, command=self.calcola,
                                         text='Calcola', bg='red', fg='blue')
        self.bt_calcola.grid(row=1, column=5, rowspan=14)


        self.lista_pianeti=['Sole', 'Luna', 'Mercurio', 'Venere', 'Marte',
                            'Giove', 'Saturno', 'Urano', 'Nettuno',
                            'Plutone', 'Nodo Lunare medio', 'Nodo Lunare vero']
        self.lista_segni=['Ariete','Toro','Gemelli','Cancro','Leone',
                          'Vergine','Bilancia','Scorpione','Sagittario',
                          'Capricorno', 'Acquario', 'Pesci']

    def calcola(self):
        giorno_giuliano=swisseph._julday(int(self.en_anno.get()),
                                         int(self.en_mese.get()),
                                         int(self.en_giorno.get()),
                                         int(self.en_ora.get()),
                                         int(self.en_minuto.get())
                                         )
        long_planet = [swisseph.calc(giorno_giuliano, x) for x in xrange(0,12)]

        for i in range(0,12):
            long_ecl = swisseph._degsplit(long_planet[i][0])
            self.labelRes1[i][0].configure(text=self.lista_pianeti[i])
            self.labelRes1[i][1].configure(text=str(long_ecl[0])+" °")
            self.labelRes1[i][2].configure(text=self.lista_segni[long_ecl[1]])
            self.labelRes1[i][3].configure(text=str(long_ecl[2])+" '")
            self.labelRes1[i][4].configure(text=str(long_ecl[3])+" \"")
                                             
            
    
root = Tkinter.Tk()
app = Applicazione(root)
root.mainloop()

No comments:

Post a Comment

How to create a virtual linux machine with qemu under Debian or Ubuntu with near native graphics performance

It's been a long time since my latest post. I know, I'm lazy. But every now and then I like to publish something that other people c...