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