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

<h1>Magic: Will, Reality and Science</h1>

Conversation between me and Gemini Me: Gemini, let's hypothesize that magic, that is, the art of causing changes in accordance w...