Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: pygtk  (Přečteno 1696 krát)

marc_ramin

  • Návštěvník
  • Příspěvků: 9
pygtk
« kdy: 13 Listopadu 2009, 19:16:13 »
cus,

potom co me perl nekolikrat zklamal, jsem se rozhodl zkusit novy scriptovaci jazyk (python =)). nejprve to byl celkem divnej pocit, zadne konce radku, zadne zavorky... no ale tedka uz se mi syntax libi a moc. pote, co jsem se prokousal zaklady a vsechno si tak nejak ohmatal, jsem se vrhnul na knihovnu gtk, se kterou mam jiz dobre zkusenosti z c a perl. opsal jsem prvni kod z tutorialu a chyba!!!
Kód: [Vybrat]
#!/usr/bin/env python

import pygtk
pygtk.require('2.0')
import gtk

class Base:
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.show()

def main(self):
gtk.main()

print __name__
if __name__ == "__main__":
base = Base()
base.main()

a po spusteni mi konsole vypise:
Kód: [Vybrat]
gtk
__main__
Traceback (most recent call last):
  File "./base.py", line 17, in <module>
    base = Base()
  File "./base.py", line 9, in __init__
    self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
AttributeError: 'module' object has no attribute 'Window'
progooglil jsem cely svet ale nic co by mi pomohlo jsem nenasel. ma nekdo s necim podobnym zkusenost?
btw testoval jsem na ubuntu 9.10

dik
martin

marc_ramin

  • Návštěvník
  • Příspěvků: 9
Re: pygtk
« Odpověď #1 kdy: 14 Listopadu 2009, 11:55:11 »
jenom dodatek: gtk jsem bez problemu pouzival v c i perl a cely proklad funguje ve fedore 11

jhrdka

  • Návštěvník
  • Příspěvků: 60
    • Jan Hrdina
Re: pygtk
« Odpověď #2 kdy: 14 Června 2010, 21:24:09 »
Ahoj, pochybuju, že je tvůj problém ještě aktuální, kdyby jo, tak doporučuju pročíst referenční příručku pygtk, protože pokud vím, tak se konstruktor gtk.Window dá použít pro tvůj účel i bez parametru, např:

Kód: [Vybrat]
win = gtk.Window()

petrakis

  • Stálý člen
  • **
  • Příspěvků: 513
Re: pygtk
« Odpověď #3 kdy: 31 Října 2010, 14:14:58 »
Mas to malinko komplikovane. zde je spravnej postup. porovnej si zpusob volani gtk.main()

Kód: [Vybrat]
#!/usr/bin/env python

import pygtk
pygtk.require('2.0')
import gtk

class Base:
    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.show()

print __name__
if __name__ == "__main__":
    base = Base()
    gtk.main()
Znalosti ⇛ Linux: Pokročilý ┃ Programování: Pokročilý ┃ Angličtina: Pokročilý
Systém: Ubuntu 10.04 32-bit (en_US.utf8)
Specifikace⇛ Intel Core 2 E8400 3.00GHz │ RAM 3072 MiB │ DG31PR INTEL - Intel DG31PR Grafické karty: nVidia NV44 [GeForce 6200 TurboCache(TM)] [10DE:161] Sítě: Ethernet: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller [10EC:8168]

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re: pygtk
« Odpověď #4 kdy: 31 Října 2010, 15:14:33 »
Mas to malinko komplikovane. zde je spravnej postup. porovnej si zpusob volani gtk.main()

Ne, že by se to nedalo napsat lépe, ale ten problém je jinde. Jediný důvod, proč by uvedený kód nefungoval je ten, že nemá odsazenu definici funkce main a tudíž nepatří do třídy Base. Jenže tato chyba by vyvolala jiné chybové hlášení, než které tazatel uvedl, tudíž tato chyba musela vzniknout až při kopírování kódu do fóra. Chybové hlášení jasně píše, že nenašel třídu gtk.Window a přitom byl gtk importován. Tohle vznikne tehdy, když se importuje špatný modul a v tomto případě je to určitě tím, že si tazatel nejprve zkoušel vytvořit skript s názvem gtk.py, jako většina začátečníků - další oblíbený je pygtk.py. Při importu se nejprve prohledá pracovní adresář a pokud nazvete svůj skript stejným jménem, jako se jmenuje kýžená knihovna, můžete hádat, co se stane. Další průšvih je ten, že se při interpretaci vytvořil bajtkód s názvem gtk.pyc a tak i když tazatel spouštěl skript s názvem base a i kdyby smazal původní gtk.py, zbyde v pracovním adresáři gtk.pyc a ten se bude importovat, místo skutečného gtk. Prasárna což? :)
« Poslední změna: 31 Října 2010, 15:17:19 od GdH »

 

Provoz zaštiťuje spolek OpenAlt.