classi e pygtk
« il: Dicembre 29, 2009, 18:50 »
Ciao, ho ristrutturato il codice di un programma in due classi, invece che in una, corrispondenti alle due finestre del programma (la prima finestra è quella iniziale).

Il problema è che adesso il codice non funziona e ci sono diversi errori, ma non so come correggerlo. Ho provato a cercare su google ma non trovo esempi analoghi.

Questo è il codice:
[hlpycode]# -*- coding: utf-8 -*-
import pygtk
pygtk.require("2.0")
import gtk

import random

ita_words = ["CASA", "PONTE", "UFFICIO", "FALSARIO", "BALLETTO", "CONSIGLIO", "CREPUSCOLO"]
eng_words =  ["house", "cat", "dog"]

class Lingua():
   def __init__(self):
     # Creazione di una finestra
     self.winlingua = gtk.Window(gtk.WINDOW_TOPLEVEL)
     self.winlingua.connect("delete_event", self.delete_event)
     self.winlingua.set_resizable(False)
     self.winlingua.set_title("Lingua")
     self.winlingua.set_border_width(5)

     # Creazione label
     self.vbox = gtk.VBox(True, 5)
     self.winlingua.add(self.vbox)
     self.label_ita = gtk.Label("Seleziona la lingua: ")
     self.vbox.pack_start(self.label_ita, True, True, 0)
     self.label_eng = gtk.Label("Select language: ")
     self.vbox.pack_start(self.label_eng, True, True, 0)

     # Creazione di pulsanti
     self.hbox = gtk.HBox(True, 5)
     self.vbox.add(self.hbox)
     self.italiano = gtk.Button("_Italiano")
     self.italiano.connect("clicked", Gioco.game())
     self.hbox.pack_start(self.italiano, True, True, 0)
     self.english = gtk.Button("_English")
     self.english.connect_object("clicked", gtk.Widget.destroy, self.winlingua)
     self.hbox.pack_start(self.english, True, True, 0)

     self.winlingua.show_all()     

   def delete_event(self, widget, event, data=None):
     return False


class Gioco(object):
   def __init__(self):
     self.bottoni = []
     self.alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

     # Finestra lingua
     winlingua = Lingua()
     winlingua.main()

   def game():   
     # Creazione di una finestra
     winlingua.destroy()
     self.window = gtk.Window()
     self.window.connect('destroy', lambda w: gtk.main_quit())
     self.window.set_title("Impiccato")
     self.vbox = gtk.VBox(False, 5)
     self.window.add(self.vbox)

     # Gtk AccelGroup
     self.accelgroup = gtk.AccelGroup()
     self.window.add_accel_group(self.accelgroup)

     # Creazione toolbar
     toolbar = gtk.Toolbar()
     toolbar.set_style(gtk.TOOLBAR_BOTH)     
     toolbar.set_border_width(5)
     toolbar.set_tooltips(True)
     self.vbox.pack_start(toolbar, False, False, 0)
     self.toolButtNew = gtk.ToolButton(gtk.STOCK_NEW)
     self.toolButtNew.set_label("_Nuova partita")
     self.toolButtNew.set_tooltip_text("Inizia una nuova partita")
     self.toolButtNew.set_use_underline(True)
     sep = gtk.SeparatorToolItem()
     toolButtQuit = gtk.ToolButton(gtk.STOCK_QUIT)
     toolButtQuit.set_tooltip_text("Esci dal gioco")
     toolbar.insert(self.toolButtNew, 0)
     toolbar.insert(sep, 1)
     toolbar.insert(toolButtQuit, 2)
     
     self.toolButtNew.connect("clicked", self.restart)
               
     # Creazione quadri
     self.hbox = gtk.HBox(True, 5)
     self.vbox.pack_start(self.hbox, False, False, 0)     

     # Quadro immagine
     self.errori = 0
     self.immagine = gtk.Image()
     self.disegnaImmagine("./images/Errore0.png")
     self.hbox.pack_end(self.immagine, True, True, 0)         

     # Selezione parola nascosta
     self.ran_word = random.choice(ita_words)
     print self.ran_word
   
     # Quadro sinistra
     quadro_sinistra = gtk.VBox(True, 5)
     self.hbox.pack_start(quadro_sinistra, True, True, 5)
     self.text = "-"
     for i in range(0,len(self.ran_word)-1):
        self.text = self.text + '-'
     self.label = gtk.Label("<span size='xx-large' weight='bold'>%s</span>" % self.text)
     self.label.set_use_markup(True)
     quadro_sinistra.pack_start(self.label, True, True, 0)

     # Quadro pulsanti
     quadro_basso = gtk.Table(rows = 5, columns = 6, homogeneous = True)
     quadro_basso.set_row_spacings(5)
     quadro_basso.set_col_spacings(5)
     quadro_sinistra.pack_start(quadro_basso, True, True, 5)         

     # Creazione pulsanti
     for i in range(0,26):
        button = gtk.Button(self.alfabeto)
   self.bottoni.append(button)
        if 0 <= i <= 5:
           riga = 0
           col = i
        elif 6 <= i <= 11:
           riga = 1
           col = i - 6
        elif 12 <= i <= 17:
           riga = 2
           col = i - 12
        elif 18 <= i <= 23:
           riga = 3
           col = i - 18
        else:
           riga = 4
           col = i - 24
        quadro_basso.attach(self.bottoni, col, col+1, riga, riga+1)
   self.bottoni.unset_flags(gtk.CAN_FOCUS)
        key, mod = gtk.accelerator_parse(self.alfabeto)   
        self.bottoni.add_accelerator("activate", self.accelgroup, key, mod, gtk.ACCEL_VISIBLE)
        self.bottoni.connect("activate", self.pulsantePremuto, self.alfabeto, self.bottoni)
        self.bottoni.connect("pressed", self.pulsantePremuto, self.alfabeto, self.bottoni)

     self.window.show_all()

     self.principale()

   def pulsantePremuto(self, evento, lettera, widget):
     print "Gestore di eventi 'pulsantePremuto'"
     widget.destroy()
     if lettera in self.ran_word:
        for i in range(0,len(self.ran_word)):
            if lettera == self.ran_word:
              self.text = self.text[:i] + lettera + self.text[i+1:]
              self.label.set_text("<span size='xx-large' weight='bold'>%s</span>" % self.text)
              self.label.set_use_markup(True)     
     else:
        self.errori = self.errori + 1
        if self.errori == 1:
          self.disegnaImmagine("./images/Errore1.png")
        if self.errori == 2:
          self.disegnaImmagine("./images/Errore2.png")
        if self.errori == 3:
          self.disegnaImmagine("./images/Errore3.png")
        if self.errori == 4:
          self.disegnaImmagine("./images/Errore4.png")
        if self.errori == 5:
          self.disegnaImmagine("./images/Errore5.png")
        if self.errori == 6:
          self.disegnaImmagine("./images/Errore6.png")

   def start(self, evento):
     self.wingioco()
     
   def restart(self, evento):
     self.window.destroy()
     self.game()
     
   def disegnaImmagine(self, image):
     pixbuf = gtk.gdk.pixbuf_new_from_file(image)
     pixbuf = pixbuf.scale_simple(250, 466, gtk.gdk.INTERP_BILINEAR)
     self.immagine.set_from_pixbuf(pixbuf)
 
   def main(self):
     gtk.main()     


if __name__ == "__main__":
    finestra = Gioco()
    finestra.main()[/hlpycode]

Spero mi possiate aiutare  :)