Forum >> Programmazione Python >> GUI >> [WxPython] wx.CalendarCtrl e wx.TextCtrl

Pagina: 1

Riposto perché il precedente "è sparito" ovvero... a me non risulta più visibile






Buongiorno,
sono nuovo e sto iniziando ad usare Python che devo dire è molto potente e versatile.




Ho un problema che spero sia facile da risolvere.

Voglio creare un form dove uno possa indicare una data inizio ed una data fine e che tali date finiscano in 2 textctrl.




Il problema è che non riesco a valorizzare la casella di testo con la data ottenuta dal calendario

import wx
import wx.adv
import datetime


class MyCalendar(wx.Frame):

    def __init__(self, *args, **kargs):
        wx.Frame.__init__(self, *args, **kargs)

        grid_sizer = wx.FlexGridSizer(3, 2, 10, 5)

        panel = wx.Panel(self)

        self.cal1 = wx.adv.CalendarCtrl(panel, 0, wx.DateTime.Now())
        self.cal2 = wx.adv.CalendarCtrl(panel, 0, wx.DateTime.Now())
        self.cal1.Bind(wx.adv.EVT_CALENDAR, self.OnDate1)
        self.cal2.Bind(wx.adv.EVT_CALENDAR, self.OnDate2)
        self.lbl1 = wx.StaticText(panel, label="Data Inizio")
        self.lbl2 = wx.StaticText(panel, label="Data Fine")
        self.button = wx.Button(panel, label="uno", name="one")
        self.da = wx.TextCtrl(panel)
        self.a = wx.TextCtrl(panel)

        grid_sizer.Add(self.lbl1, wx.EXPAND)
        grid_sizer.Add(self.lbl2, wx.EXPAND)
        grid_sizer.Add(self.cal1, wx.EXPAND)
        grid_sizer.Add(self.cal2, wx.EXPAND)
        grid_sizer.Add(self.da, wx.LEFT)
        grid_sizer.Add(self.a, wx.RIGHT)

        sizer = wx.BoxSizer(wx.HORIZONTAL)

        sizer.Add(grid_sizer, proportion=1, flag=wx.ALL|wx.EXPAND, border=10)
        panel.SetSizer(sizer)

    def OnDate1(self, e):

        data=datetime.datetime.strftime(self.cal1.GetDate(), '%d-%m-%Y %H:%M')
        self.da.SetValue(data)


    def OnDate2(self, event):
        print(self.cal2.GetDate())
        wx.Window.Close(self)


if __name__ == '__main__':
    app = wx.App()
    frame = MyCalendar(None)
    frame.Show()
    app.MainLoop()





Perdonate se il codice non è proprio come dovrebbe essere, ma sono letteralmente alle prime righe di codice e già non so come aprire il frame "alla dimensione corretta" :(

Aggiungo che mi piacerebbe avere soltanto un controllo "OnDate" che sappia da se riconoscere quale calendar lo richiama e quindi valorizzi il giusto text.... ma vabbè... un passo alla volta. :)




Grazie a chi vorrà rispondere.




Ciao
Attualmente sono al cellulare quindi non posso dilungarmi ed è parecchio che non uso le WX
Io all’interno della funzione metterò in print per verificare se l’evento del calendar mi restituisce i dati che desideri, poi sei sicuro di utilizzare il comando (setvalue) giusto per il controller (widget texture ctrl) che usi?

E forse non è meglio cambiare il Widget?? Se non hai bisogno di scrivere testo dà tastiera!!???
Il print l'ho messo (e poi tolto) e restituisce correttamente la data.
Sto usando Wx perché mi pare sia quello più "usato". O almeno così mi par di aver capito. :/
Sto usando Wx perché mi pare sia quello più "usato". O almeno così mi par di aver capito. :/

Non intendevo le WX ma il widget WX.TextCTRL, se non hai bisogno di scrivere direttamente sul contollo qualcosa a mano,

oltre l'ora che ricavi dal WX.Calendar,


io userei una WX.Label per fargli scrivere l'ora.

Comunque per cercare di aiutarti prova a cambiare la funzione OneDate1 cosi:

    def OnDate1(self, event):
        #data = datetime.datetime(self.cal1.GetDate())
        #data = datetime.date.strftime(self.cal1.GetDate(), '%d-%m-%Y %H:%M')
        a = self.cal1.GetDate()
        print(a)
        print (type(a))
        print((a.year),(a.month),(a.day),(a.hour),(a.minute),(a.second))
        self.a.SetValue(str(a))

e in fine per visualizzare il tuo frame più grande:

if __name__ == '__main__':
    app = wx.App()
    frame = MyCalendar(None)
    frame.SetSize(wx.Size(500,500))
    frame.Show()
    app.MainLoop()
ma credo che dovresti esercitarti e leggere più a fondo come utilizzare i WX.box orrizontali,verticali e le loro proprieta di espansione e posizionamento tra loro e i Widget contenuti.



--- Ultima modifica di Orsogrizzly in data 2019-09-16 20:58:14 ---
....
ma credo che dovresti esercitarti e leggere più a fondo come utilizzare i WX.box orrizontali,verticali e le loro proprieta di espansione e posizionamento tra loro e i Widget contenuti.



--- Ultima modifica di Orsogrizzly in data 2019-09-16 20:58:14 ---
.... ci sto provando. E' che tra lavoro e 3 bambini.... il tempo è risicatissimo e mi ritrovo ad andar a tentoni.

Grazie per la disponibilità. In giornata provo ed aggiorno il thread.




Grazie 1000
.... ci sto provando. E' che tra lavoro e 3 bambini.... il tempo è risicatissimo e mi ritrovo ad andar a

Benvenuto nel club :D :D
.... ci sto provando. E' che tra lavoro e 3 bambini.... il tempo è risicatissimo e mi ritrovo ad andar a

Benvenuto nel club :D :D
:D :D :D :D :D
Jena
Vado out
Ho cercato sul tuo profilo la mail per poterti contattare in privato ma non c’è.

Se è ripeto se ti va sul mio profilo trovi la mia mail, inviami una mail con oggetto WX E PYTHON cosicché ti possa contestare, ripeto solo se ti va a genio.


--- Ultima modifica di Orsogrizzly in data 2019-09-17 10:53:58 ---
Jena
Vado out
Ho cercato sul tuo profilo la mail per poterti contattare in privato ma non c’è.

Se è ripeto se ti va sul mio profilo trovi la mia mail, inviami una mail con oggetto WX E PYTHON cosicché ti possa contestare, ripeto solo se ti va a genio.


--- Ultima modifica di Orsogrizzly in data 2019-09-17 10:53:58 ---
Strano... la mail c'è......

comunque jena at iname dot com

;)
OT
... Orso... ti ho mandato una mail ma è stata cassata:




A message that you sent could not be delivered to one or more of
its recipients. This is a permanent error. The following address(es)
failed:


orsoweb@alice.it:
SMTP error from remote server for MAIL FROM command, host: smtp.aliceposta.it (82.57.200.133) reason: 550 mail not accepted from blacklisted IP address




/OT


--- Ultima modifica di Jena in data 2019-09-17 13:25:42 ---


Pagina: 1



Esegui il login per scrivere una risposta.