Topic: TeachersTab  (Letto 1393 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Kami

  • python sapiens
  • *****
  • Post: 519
  • Punti reputazione: 0
    • Mostra profilo
TeachersTab
« il: Agosto 14, 2007, 15:06 »
Aiutoo! Ho iniziato questo programma per mia madre, quindi vorrei finirlo, non essendo una cretinata che faccio x me ma... mi sono bloccato..
Il programma dovrebbe controllare l'esattezza dei punteggi di una prova. Inserendo infatti In alcuni spazi il numero di domande e il punteggio di ognuna di esse dovrebbe moltiplicare i numeri delle domande per i rispettivi punteggi e sommare il tutto.
(è fatto in wxPython)

questo è il codice:
from wxPython.wx import *

class MioFrame(wxFrame):
    def __init__(self):
        wxFrame.__init__(self, None, -1, "TeachersTab")

        ID_STAMP = wxNewId()
        ID_ESCI = wxNewId()
        ID_INFO = wxNewId()
        ID_GUIDA = wxNewId()
        menu_file = wxMenu()
        menu_file.Append(ID_STAMP, "&Stampa",
                         "Stampa la tabella")
        menu_file.AppendSeparator()
        menu_file.Append(ID_ESCI, "&Esci",
                         "Esci dal programma")
        EVT_MENU(self, ID_STAMP, self.OnStamp)
        EVT_MENU(self, ID_ESCI, self.OnEsci)

        menu_bar = wxMenuBar()
        menu_bar.Append(menu_file, "&File");
        self.SetMenuBar(menu_bar)

        menu_help = wxMenu()
        menu_help.Append(ID_INFO, "&Info",
                         "Informazioni sul programma")
        menu_help.Append(ID_GUIDA, "&Guida",
                         "Guida all'utilizzo del programma")
        EVT_MENU(self, ID_INFO, self.OnInfo)
        EVT_MENU(self, ID_GUIDA, self.OnGuida)

        menu_bar.Append(menu_help, "&Help");

        self.CreateStatusBar()
        self.SetStatusText("Selezionare un opzione")

    def OnStamp(self, event):
        wxMessageBox("Questa opzione stampa la tabella, a lavoro terminato")

    def OnEsci(self, event):
        self.Close(1)

    def OnInfo(self, event):
        wxMessageBox("TeachersTab (2007/2008)")

    def OnGuida(self, event):
        wxMessageBox("Guida in costruzione")

class TuaApp(wxApp):
    def OnInit(self):
        frame = MioFrame()
        frame.Show(1)
        self.SetTopWindow(frame)
        return 1

class MiaApp(wxApp):
    def OnInit(self):
        dlg = wxDialog(TuaApp, -1, "", size=(200,300))

        ID_TXT = wxNewId()
        txt1 = wxTextCtrl(dlg, ID_TXT, "",
                          wxPoint(5, 5))
        EVT_TEXT(self, ID_TXT, self.OnText)


app = TuaApp()
app.MainLoop()


Purtroppo mi sono bloccato già dall'inizio, infatti con queste stringhe:
class MiaApp(wxApp):
    def OnInit(self):
        dlg = wxDialog(TuaApp, -1, "", size=(200,300))

        ID_TXT = wxNewId()
        txt1 = wxTextCtrl(dlg, ID_TXT, "",
                          wxPoint(5, 5))
        EVT_TEXT(self, ID_TXT, self.OnText)

sarebbe dovuta apparire una sezione nella quale avrei potuto scrivere ma... non funziona. Qualcuno sa dirmi il perchè?

Offline Beppe

  • python sapiens
  • *****
  • Post: 672
  • Punti reputazione: 0
    • Mostra profilo
Re: TeachersTab
« Risposta #1 il: Agosto 14, 2007, 16:17 »
Prima di tutto

from wxPython.wx import *

è un deprecation mode, quindi dovrebbe darti  errrore all'apertura.Se si devi aggiornare le librerie di wxPython se no stai usando una versione vecchia ed appunto 'deprecata'.... ;)
Sotto la versione corretta che usa le ultime versioni di Python e wxPython, con le modifiche del caso.
Se non ho capito male vuoi fare una cosa del genere. ;)

# -*- coding: utf-8 -*-
import wx
import time
import sys,traceback
from string import strip

#Richiamabile da vari punti dello script.
AppTitle = 'TeachersTab'

class Main_Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, '',size=(600,400))


        #Eventuale icona.
        #self.SetIcon(wx.Icon("MyIcon.ico",wx.BITMAP_TYPE_ICO))
        #Setta il titolo
        self.SetTitle('TeachersTab')
       
        #Intercetta l'uscita con il tasto x
        self.Bind(wx.EVT_CLOSE, self.OnExit)
       
        panel = wx.Panel(self)

        #Il Menu ha due voci
        mnuFile = wx.Menu()
        mnuInfo = wx.Menu()

        #mnuFile
        menuitem = mnuFile.Append(wx.ID_ANY, "&Stampa", "Stampa la tabella!")
        self.Bind(wx.EVT_MENU, self.OnStampa, menuitem)
        menuitem = mnuFile.AppendSeparator()
        menuitem = mnuFile.Append(wx.ID_ANY, "&Esci", "Chiude il programma!")
        self.Bind(wx.EVT_MENU, self.OnExit, menuitem)
        #mnuInfo
        menuitem = mnuInfo.Append(wx.ID_ANY, "&Info", "Informazioni sul programma!")
        self.Bind(wx.EVT_MENU, self.OnInfo, menuitem)
        menuitem = mnuInfo.Append(wx.ID_ANY, "&Guida", "Guida al programma!")
        self.Bind(wx.EVT_MENU, self.OnGuida, menuitem)

        #Crea la barra del menu
        menubar = wx.MenuBar()
       
        #Ci aggiunge i menu creati sopra
        menubar.Append(mnuFile, "&File")
        menubar.Append(mnuInfo, "&Help")
        #Assegna la barra del menu alla frame
        self.SetMenuBar(menubar)

        #Statusbar
        self.myStatusBar = self.CreateStatusBar(1,wx.ST_SIZEGRIP)
        #Divide in due la status bar
        self.myStatusBar.SetFieldsCount(2)
        #Ridimensiona le due parti
        self.myStatusBar.SetStatusWidths([-7, -3])
        #Scrive un testo sulla seconda parte
        self.myStatusBar.SetStatusText('Selezionare un opzione.',1)

        #Orologio
        self.OnTimer(None)
        self.timer = wx.Timer(self)
        self.timer.Start(1000)
        self.Bind(wx.EVT_TIMER, self.OnTimer)
       
        #Centra la frame all'apertura
        self.Center()
        #lo metto qui per fare aprire prima la maschera e poi la dialog
        self.Show(True)
        #Qui apre la dialog per inserire quello che vuoi
        self.OnInit()

    def OnStampa(self, event):
        sMessage = "Questa opzione stampa la tabella, a lavoro terminato"
        wx.MessageBox(sMessage, AppTitle, wx.OK|wx.ICON_INFORMATION)

    def OnInfo(self, event):
        sMessage = "TeachersTab(2007/2008)\Developed in wxPython \n by Kami for his Mamy"
        wx.MessageBox(sMessage, AppTitle, wx.OK|wx.ICON_INFORMATION)

    def OnGuida(self, event):
        sMessage = "Guida in costruzione!"
        wx.MessageBox(sMessage, AppTitle, wx.OK|wx.ICON_INFORMATION)     

    def OnExit(self,event):
        intScelta = fctClose()
        if intScelta == 2:
            self.Destroy()
    #gestisce l'orologio sulla statusbar
    def OnTimer(self, evt):
        t = time.localtime(time.time())
        sbTime = time.strftime("Data Astrale %d/%m/%Y sono le %H:%M:%S", t)
        self.myStatusBar.SetStatusText(sbTime,0)

    def OnInit(self):

        dlgAsk = wx.TextEntryDialog(None,"Inserisci qualcosa!",
                                  AppTitle,'',wx.OK|wx.CANCEL)

        retValue = dlgAsk.ShowModal()
       
        if retValue == wx.ID_OK:

            try:
                #recupera il testo immesso
                sText=dlgAsk.GetValue()
                #Controlla cosa  viene inserito
                if len(sText)<1:
                    #se non inserisci niente riapre la dialog   
                    sMessage = "Non hai inserito niente\nriapro la dialog!"
                    wx.MessageBox(sMessage, AppTitle, wx.OK|wx.ICON_INFORMATION)
                    dlgAsk.Destroy()
                    self.OnInit()

                else:
                    #se viene inserito qualcosa lo scrive in un messagebox
                    sMessage = "Hai inserito:\n%s" % dlgAsk.GetValue()
                    wx.MessageBox(sMessage, AppTitle, wx.OK|wx.ICON_INFORMATION)
                    dlgAsk.Destroy()

            except:
                #le eccezioni vengono reindirizzate su un file di log esterno
                #ma vengono anche mostrate in una messagebox
                excValue = str(sys.exc_value)
                excType = str(sys.exc_type)
                logTime = time.localtime(time.time())
                FormatlogTime = time.strftime("%d/%m/%Y %H:%M:%S", logTime)
                sFormatLog = ("Interceptor: %s %s %s" % (FormatlogTime,excValue,excType))
                fLog = open('log.txt','a')
                fLog.write(sFormatLog)
                fLog.close()
                wx.MessageBox("Huston we have get a problem!\n%s' " % sFormatLog, AppTitle, wx.OK|wx.ICON_ERROR)     
        else:
            #se viene premuto il tasto annulla
            wx.MessageBox('Inserimento annullato!', AppTitle, wx.OK|wx.ICON_INFORMATION)
            dlgAsk.Destroy()
           
           
       
#Nota che questa funzione e esterna alla frame.
#Questo per poterla utilizzare per uscire con la x.
def fctClose():
      try:
              ret=wx.MessageBox('Vuoi uscire veramente?', AppTitle, wx.YES_NO | wx.CENTRE |wx.NO_DEFAULT)
              return ret
      except:
            excValue = str(sys.exc_value)
            excType = str(sys.exc_type)
            sys.stdout=open('log.txt','a')
            logTime = time.localtime(time.time())
            FormatlogTime = time.strftime("%d/%m/%Y %H:%M:%S", logTime)
            print 'Interceptor:',FormatlogTime,excValue,excType
           
            wx.MessageBox("Huston abbiamo un problema!\n%s' " % excValue, AppTitle, wx.OK)

if __name__=='__main__':
    MyApp = wx.PySimpleApp(redirect=True)
    frame=Main_Frame()
    MyApp.MainLoop()       


fammi sapere :)

Offline Kami

  • python sapiens
  • *****
  • Post: 519
  • Punti reputazione: 0
    • Mostra profilo
Re: TeachersTab
« Risposta #2 il: Agosto 14, 2007, 18:52 »
Arg, io nn so fare nemmeno una delle cose k hai fatto nello script ma... nn era qll k intendevo..
Doveva essere + o - una cosa così:

----------------------------------------------------
|-------|  |--------|   |-------| |--------|
|         
|-------| |---------|   |-------| |--------|
|
|      |tot:           |       |Genera|
----------------------------------------------------

con il simbolo |---------| k indica uno spazio vuoto, (gli spazi devono essere 10 righe in orizzontale e 2 colonne in verticale)
tot ch indica una casella di sola lettura che a lavoro terminato scrive tot: e il totale,
un pulsante "genera" che se premuto da il totale..
chiedo troppo?

Offline Beppe

  • python sapiens
  • *****
  • Post: 672
  • Punti reputazione: 0
    • Mostra profilo
Re: TeachersTab
« Risposta #3 il: Agosto 15, 2007, 01:30 »
No ,chiedere è sempre lecito ;)
Però se te lo faccio io che ci guadagni?
Studia a fondo il mio script e gli esempi che trovi su questo sito
e vedrai che in men che non si dica le cose ti verranno da sole. ;)

Offline Kami

  • python sapiens
  • *****
  • Post: 519
  • Punti reputazione: 0
    • Mostra profilo
Re: TeachersTab
« Risposta #4 il: Agosto 15, 2007, 17:07 »
Acc  :D
Nemmeno un piccolo aiuto?  :question:
Ook, studio studio XD
Ultima cosa, qualcuno sa dove posso trovare un buon manuale su wxPython? (possibilmente in italiano)

Offline Coil

  • python erectus
  • ***
  • Post: 145
  • Punti reputazione: 0
    • Mostra profilo
Re: TeachersTab
« Risposta #5 il: Agosto 15, 2007, 19:39 »

Offline Beppe

  • python sapiens
  • *****
  • Post: 672
  • Punti reputazione: 0
    • Mostra profilo
Re: TeachersTab
« Risposta #6 il: Agosto 15, 2007, 19:52 »
Prova qui http://www.barisione.org/wxpython/cap1.html
No mamma mia sto sito no...usa una versione vecchia  ;)
Guardati questo invece, è in inglese ma ha un sacco di esempi pronti all'uso.
http://zetcode.com/wxpython/

Offline guldo

  • python erectus
  • ***
  • Post: 111
  • Punti reputazione: 0
    • Mostra profilo
Re: TeachersTab
« Risposta #7 il: Agosto 15, 2007, 20:48 »
Prova qui http://www.barisione.org/wxpython/cap1.html
No mamma mia sto sito no...usa una versione vecchia  ;)
Allora sarà il caso di aggiornare il thread sulla documentazione, che riporta quella come prima risorsa per wxPython.  :)

Offline Markon

  • python sapiens sapiens
  • *
  • moderatore
  • Post: 4.104
  • Punti reputazione: 5
    • Mostra profilo
    • Neolithic
Re: TeachersTab
« Risposta #8 il: Agosto 16, 2007, 13:45 »
Citazione
Allora sarà il caso di aggiornare il thread sulla documentazione, che riporta quella come prima risorsa per wxPython.  :)

Fatto ;)

Offline Kami

  • python sapiens
  • *****
  • Post: 519
  • Punti reputazione: 0
    • Mostra profilo
Re: TeachersTab
« Risposta #9 il: Agosto 17, 2007, 11:45 »
Nn c'è 1 guida ugualmente buona, in italiano? Con l'inglese me la cavo, ma se c'è in italiano è molto meglio.. :dont-know:

Offline Markon

  • python sapiens sapiens
  • *
  • moderatore
  • Post: 4.104
  • Punti reputazione: 5
    • Mostra profilo
    • Neolithic
Re: TeachersTab
« Risposta #10 il: Agosto 17, 2007, 17:16 »
Citazione
Nn c'è 1 guida ugualmente buona, in italiano? Con l'inglese me la cavo, ma se c'è in italiano è molto meglio.. dont-know

Mi sa che devi aspettare che python-it.org le traduca prima :-)

Purtroppo in italiano ho trovato solo quella .. :(

Se qualcuno ne conosce altre le metto subito nell'indice ;)

Offline Kami

  • python sapiens
  • *****
  • Post: 519
  • Punti reputazione: 0
    • Mostra profilo
Re: TeachersTab
« Risposta #11 il: Agosto 18, 2007, 17:57 »
Ok, grazie!