PyGTK - Classe calendario
Il widget Calendario nel toolkit PyGTK mostra un semplice calendario con visualizzazione di un mese alla volta. I controlli di navigazione per cambiare mese e anno vengono visualizzati per impostazione predefinita. Le opzioni di visualizzazione possono essere opportunamente configurate.
Il valore della proprietà month è compreso tra 0 e 11 e quello della proprietà date è compreso tra 1 e 31.
C'è un semplice costruttore per creare un oggetto gtk.Calendar -
cal = gtk.Calendar()
Lo stile di visualizzazione predefinito mostra il mese e l'anno correnti nonché i nomi dei giorni.
La classe gtk.Calendar ha i seguenti metodi:
Calendar.select_month (mm, yy): cambia la visualizzazione del calendario in quella specificata mm e yy.
Calendar.select_day (dd): seleziona il file specificato dd sul calendario quando ha un valore compreso tra 1 e 31. If dd è 0 quindi la selezione del giorno corrente viene rimossa.
Calendar.display_options (): imposta le opzioni di visualizzazione del calendario sul valore specificato da flags. Le possibili opzioni di visualizzazione sono una combinazione di:
gtk.CALENDAR_SHOW_HEADING | Specifica che devono essere visualizzati il mese e l'anno. |
gtk.CALENDAR_SHOW_DAY_NAMES | Specifica che devono essere presenti tre descrizioni dei giorni di lettere. |
gtk.CALENDAR_NO_MONTH_CHANGE | Impedisce all'utente di cambiare mese con il calendario. |
gtk.CALENDAR_SHOW_WEEK_NUMBERS | Visualizza i numeri di ogni settimana dell'anno corrente, in basso a sinistra del calendario. |
gtk.CALENDAR_WEEK_START_MONDAY | Inizia la settimana di calendario il lunedì, invece della domenica predefinita. |
Calendar.get_date (): recupera i numeri di anno, mese e giorno selezionati del calendario come una tupla (anno, mese, giorno).
Il widget gtk.Calendar emette i seguenti segnali:
giorno selezionato | Viene emesso quando un giorno viene selezionato dall'utente o a livello di codice. |
mese cambiato | Viene emesso quando il mese di calendario viene modificato a livello di codice o dall'utente. |
il prossimo mese | Viene emesso quando l'utente fa clic sul controllo di navigazione "mese successivo" nell'intestazione del calendario. |
l'anno prossimo | Viene emesso quando l'utente fa clic sul controllo di navigazione "anno successivo" nell'intestazione del calendario. |
mese prec | Viene emesso quando l'utente fa clic sul controllo di navigazione "mese precedente" nell'intestazione del calendario. |
anno prec | Viene emesso quando l'utente fa clic sul controllo di navigazione "anno precedente" nell'intestazione del calendario. |
Nell'esempio seguente, un controllo gtk.Calendar e quattro pulsanti sono posizionati nella finestra di primo livello.
Quando si fa clic sul pulsante "intestazione", le opzioni di visualizzazione del calendario vengono impostate su SHOW_HEADING -
def heading(self, widget):
self.cal.set_display_options(gtk.CALENDAR_SHOW_HEADING)
Quando l'utente fa clic sul pulsante "nome giorno", la richiamata imposta le opzioni di visualizzazione su SHOW_DAY_NAMES -
def dayname(self, widget):
self.cal.set_display_options(gtk.CALENDAR_SHOW_DAY_NAMES)
Entrambe le opzioni di visualizzazione sono abilitate quando si preme il pulsante "Both". Per cominciare, tutti i flag delle opzioni di visualizzazione vengono rimossi impostandolo su 0.
self.cal.set_display_options(0)
Il pulsante "imposta" fa apparire una finestra di messaggio che mostra la data attualmente contrassegnata.
tp = self.cal.get_date()
str1 = str(tp[0])
str2 = str(tp[1]+1)
str3 = str(tp[2])
label = gtk.Label("Date selected:"+str3+"-"+str2+"-"+str1)
dialog.vbox.add(label)
label.show()
Esempio
Rispettare il codice seguente:
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("Calendar Demo")
self.set_size_request(300, 200)
self.set_position(gtk.WIN_POS_CENTER)
vbox = gtk.VBox(False, 5)
self.cal = gtk.Calendar()
halign1 = gtk.Alignment(0.5, 0.5, 0, 0)
halign1.add(self.cal)
self.cal.set_display_options(0)
valign = gtk.Alignment(0, 1, 0, 0)
vbox.pack_start(halign1)
self.btn1 = gtk.Button("set")
self.btn2 = gtk.Button("heading")
self.btn3 = gtk.Button("day name")
self.btn4 = gtk.Button("Both")
hbox = gtk.HBox(True, 3)
hbox.add(self.btn1)
hbox.add(self.btn2)
hbox.add(self.btn3)
hbox.add(self.btn4)
halign = gtk.Alignment(0.5, 0.5, 0, 0)
halign.add(hbox)
vbox.pack_start(halign, False, True, 10)
self.add(vbox)
self.btn1.connect("clicked", self.selectdate)
self.btn2.connect("clicked", self.heading)
self.btn3.connect("clicked", self.dayname)
self.btn4.connect("clicked", self.bothflags)
self.connect("destroy", gtk.main_quit)
self.show_all()
def heading(self, widget):
self.cal.set_display_options(gtk.CALENDAR_SHOW_HEADING)
def dayname(self, widget):
self.cal.set_display_options(gtk.CALENDAR_SHOW_DAY_NAMES)
def bothflags(self, widget):
self.cal.set_display_options(gtk.CALENDAR_SHOW_HEADING|gtk.CALENDAR_SHOW_DAY_NAMES)
def selectdate(self, widget):
tp = self.cal.get_date()
dialog = gtk.Dialog("My dialog",
self,
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
(gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
str1 = str(tp[0])
str2 = str(tp[1]+1)
str3 = str(tp[2])
label = gtk.Label("Date selected:"+str3+"-"+str2+"-"+str1)
dialog.vbox.add(label)
label.show()
res = dialog.run()
dialog.destroy()
PyApp()
gtk.main()
Il codice sopra genererà il seguente output: