Problém s funkcí, existuje "globalizace"? – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Problém s funkcí, existuje "globalizace"? – Python – Fórum – Programujte.comProblém s funkcí, existuje "globalizace"? – Python – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
18. 8. 2010   #1
-
0
-

Zdravim,
snažim se přepsat svůj původní program na zkoušení slovíček z Tkinteru do GTK. Podle návodů na internetu jsem zjistil, že bude asi lepší, když budu psát kód do třídy. Avšak asi jsem to nějak nepochopil, mám třídu, v ní funkci __init__, kde je uloženo prozatímní hlavní okno. Na stejnou úroveň jako je funkce __init__ jsem vložil funkci vyber_okno(), jenž jsem připojil tlačítku v hlavním okně. Problém je, že se na něj nemůže připojit. Ale asi bude lepší když sem dám kód, než to dlouze vysvětlovat.

#!/usr/bin/env python

# -*- coding: utf-8 -*-
import sys
import os
try:
import pygtk
pygtk.require("2.0")
import gtk
except:
print "Error: PyGTK and GTK 2.xx must be installed to run this application. Exiting"
sys.exit(1)

class hlavni_okno(gtk.Window):

def vyber_soubor(self,vyber):
cesta = os.getenv("HOME")
dialog = gtk.FileChooserDialog("Otevřít soubor...",
None,
gtk.FILE_CHOOSER_ACTION_OPEN,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OPEN, gtk.RESPONSE_OK))
dialog.set_default_response(gtk.RESPONSE_OK)
dialog.set_current_folder(cesta)
filter = gtk.FileFilter()
filter.set_name("Soubory typu *.pcx")
filter.add_pattern("*.pcx")
dialog.add_filter(filter)
response = dialog.run()
if response == gtk.RESPONSE_OK:
print dialog.get_filename(), 'selected'
self.tlacitko.set_sensitive(True)
self.tlacitko2.set_sensitive(True)
elif response == gtk.RESPONSE_CANCEL:
print 'Closed, no files selected'
dialog.destroy()


def __init__(self):


## samotné okno
self.okno = gtk.Window()
self.okno.set_title("Angličtina 0.3 GTK+ verze")
self.okno.set_position(gtk.WIN_POS_CENTER)
self.okno.set_border_width(0)
self.okno.set_resizable(False)

self.box2 = gtk.VBox(False, 5)

## menu
mb = gtk.MenuBar()

filemenu = gtk.Menu()
filem = gtk.MenuItem("File")
filem.set_submenu(filemenu)

exit = gtk.MenuItem("Exit")
exit.connect("activate", gtk.main_quit)
filemenu.append(exit)

mb.append(filem)
self.box2.pack_start(mb, False, False, 0)





self.vybrat = gtk.Button("Vyberte soubor")
self.vybrat.connect("clicked", vyber_soubor)
self.vybrat.show()

self.tlacitko = gtk.Button("Spusť test")
self.tlacitko.set_sensitive(False)
self.tlacitko.show()
self.tlacitko2 = gtk.Button("Zobrazit seznam \n slovíček")
self.tlacitko2.set_sensitive(False)
self.tlacitko2.show()


self.box = gtk.HBox(True, 5)
self.box.add(self.tlacitko)
self.box.add(self.tlacitko2)
self.box.show()


self.box2.pack_start(self.vybrat, False, False, 5)
self.box2.pack_end(self.box)

self.box2.show_all()

self.okno.add(self.box2)

self.okno.show()



def spust(self):

gtk.main()


if __name__ == "__main__" :

aplikace = hlavni_okno()
aplikace.spust()


Zatim to vypadá jako prasečinka, ale syntaxi zformátuju líp. Když dám funkci vyber_soubor do __init__, tak to funguje, jak má. Pak ale nevidím smysl tříd a takovéhoto programu. Co myslíte, chybí mi něco v kódu, že program nefunguje, nebo je podmínkou vložit funkci vyber_soubor do funkce __init__ ?

Díky za rady

EDIT:
Tak pardon, trochu jsem spěchal s dotazem a na chybu jsem už přišel... Můžete to smazat

Nahlásit jako SPAM
IP: 87.249.149.–
Reklama
Reklama
18. 8. 2010   #2
-
0
-

Radši napiš kde byla chyba, ať to tu může zůstat jako odkaz příštím generacím :-)

Nahlásit jako SPAM
IP: 83.240.78.–
Podpis: Do podpisu nelze vložit obrázky ani HTML kód. Je podporován nový řádek tagem
.
18. 8. 2010   #3
-
0
-

No dobře, ať se mají z čeho učit :) V kódu jsem chyby vyznačil tučně

#!/usr/bin/env python 

# -*- coding: utf-8 -*-
import sys
import os
try:
import pygtk
pygtk.require("2.0")
import gtk
except:
print "Error: PyGTK and GTK 2.xx must be installed to run this application. Exiting"
sys.exit(1)

class hlavni_okno(gtk.Window):

def vyber_soubor(self,widget):
cesta = os.getenv("HOME")
dialog = gtk.FileChooserDialog("Otevřít soubor...",
None,
gtk.FILE_CHOOSER_ACTION_OPEN,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OPEN, gtk.RESPONSE_OK))
dialog.set_default_response(gtk.RESPONSE_OK)
dialog.set_current_folder(cesta)
filter = gtk.FileFilter()
filter.set_name("Soubory typu *.pcx")
filter.add_pattern("*.pcx")
dialog.add_filter(filter)
response = dialog.run()
if response == gtk.RESPONSE_OK:
print dialog.get_filename(), 'selected'
self.tlacitko.set_sensitive(True)
self.tlacitko2.set_sensitive(True)
elif response == gtk.RESPONSE_CANCEL:
print 'Closed, no files selected'
dialog.destroy()


def __init__(self):


## samotné okno
self.okno = gtk.Window()
self.okno.set_title("Angličtina 0.3 GTK+ verze")
self.okno.set_position(gtk.WIN_POS_CENTER)
self.okno.set_border_width(0)
self.okno.set_resizable(False)

self.box2 = gtk.VBox(False, 5)

## menu
mb = gtk.MenuBar()

filemenu = gtk.Menu()
filem = gtk.MenuItem("File")
filem.set_submenu(filemenu)

exit = gtk.MenuItem("Exit")
exit.connect("activate", gtk.main_quit)
filemenu.append(exit)

mb.append(filem)
self.box2.pack_start(mb, False, False, 0)





self.vybrat = gtk.Button("Vyberte soubor")
self.vybrat.connect("clicked", self.vyber_soubor)
self.vybrat.show()

self.tlacitko = gtk.Button("Spusť test")
self.tlacitko.set_sensitive(False)
self.tlacitko.show()
self.tlacitko2 = gtk.Button("Zobrazit seznam \n slovíček")
self.tlacitko2.set_sensitive(False)
self.tlacitko2.show()


self.box = gtk.HBox(True, 5)
self.box.add(self.tlacitko)
self.box.add(self.tlacitko2)
self.box.show()


self.box2.pack_start(self.vybrat, False, False, 5)
self.box2.pack_end(self.box)

self.box2.show_all()

self.okno.add(self.box2)

self.okno.show()



def spust(self):

gtk.main()


if __name__ == "__main__" :

aplikace = hlavni_okno()
aplikace.spust()

Nahlásit jako SPAM
IP: 87.249.149.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 25 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý