Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: self.builder in ene functie niet beschikbaar, maar in andere wel  (gelezen 1675 keer)

Offline MartijnB

  • Lid
    • http://www.mbastiaan.nl
Hoi,

Zoals misschien bekend van m'n vorige topic ben ik een plugin aan het schrijven voor Rhythmbox. Ik zit alleen wéér met een, voor mij, onverklaarbaar probleem. Hier een stuk code:
class ConfigurationDialog(object):
    def __init__(self, glade_file):
        self.builder = gtk.Builder()
        self.builder.add_from_file(glade_file)

    def get_dialog(self):
        print(self)
        print(self.builder)
       
        return self.dialog

    def lyricConfig_response(self, dialog, signal):
        print(self)
        print(self.builder)
In __init__ staat nog wel meer code, maar dat is even niet relevant. Met __init__() wordt een GTK+ schermpje aangemaakt. Vervolgend wordt get_dialog aangeroepen om die vervolgens terug te geven aan Rhythmbox.

Zodra er op sluiten wordt gedrukt, wordt lyricConfig_response() aangeroepen. Nu krijg ik deze output:
(11:56:08) [0x89ea408] [ConfigurationDialog.get_dialog] .gnome2/rhythmbox/plugins/lyricWiki/LyricsConfigurationDialog.py:135: <lyricWiki.LyricsConfigurationDialog.ConfigurationDialog object at 0x92bbbcc>

(11:56:08) [0x89ea408] [ConfigurationDialog.get_dialog] .gnome2/rhythmbox/plugins/lyricWiki/LyricsConfigurationDialog.py:136: <gtk.Builder object at 0x92ed554 (GtkBuilder at 0x8e798a0)>

(11:56:13) [0x89ea408] [ConfigurationDialog.lyricConfig_response] .gnome2/rhythmbox/plugins/lyricWiki/LyricsConfigurationDialog.py:147: <lyricWiki.LyricsConfigurationDialog.ConfigurationDialog object at 0x92bbbcc>

Traceback (most recent call last):
  File "/home/martijn2/.gnome2/rhythmbox/plugins/lyricWiki/LyricsConfigurationDialog.py", line 75, in lyricConfig_response
    print(self.builder)
AttributeError: 'ConfigurationDialog' object has no attribute 'builder'
Dat is toch vreemd? ???. De 'self' is precies hetzelfde (0x92bbbcc == 0x92bbbcc), maar toch is 'builder' niet beschikbaar.

Offline Johan van Dijk

  • Administrator
    • johanvandijk
Re: self.builder in ene functie niet beschikbaar, maar in andere wel
« Reactie #1 Gepost op: 2009/08/15, 12:30:27 »
Redelijk offtopic, maar misschien toch relevant omdat ik "lyricwiki" zie.
Dit krijg ik sinds kort te zien in MPD in plaats van de lyrics:
Citaat
Unfortunately, due to licensing restrictions from some of the major music publishers we can no longer return lyrics through the LyricWiki API (where this application gets some or all of its lyrics).

The lyrics for this song can be found at the following URL:
http://lyricwiki.org/bandnaam:songnaam

<a href='http://lyricwiki.org/bandnaam:songnaam'>bandnaam:songnaam</a>


(Please note: this is not the fault of the developer who created this application, but is a restriction imposed by the music publishers themselves.)

Met dank aan de platenmaatschappijen  >:(

Als je dus een plugin aan het maken bent voor lyricwiki, kan je beter iets anders zoeken, helaas  :'(

Offline MartijnB

  • Lid
    • http://www.mbastiaan.nl
Re: self.builder in ene functie niet beschikbaar, maar in andere wel
« Reactie #2 Gepost op: 2009/08/15, 12:31:49 »
Ik heb het inderdaad gelezen. Ik ben alleen te lui geweest om de naam te veranderen :D.

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: self.builder in ene functie niet beschikbaar, maar in andere wel
« Reactie #3 Gepost op: 2009/08/15, 19:20:04 »
Er is waarschijnlijk iets anders mis - iets dat we niet zien in jouw code snippet. Hoe wordt die functie lyricConfig_response bijvoorbeeld aangeroepen?

is het trouwens een open source plug-in die je ontwikkelt voor Rhythmbox? Er zijn hier namelijk wel heel wat Rhythmbox gebruikers op het forum :) kan wel interessant zijn voor in de Etalage indien het open source wordt.
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline MartijnB

  • Lid
    • http://www.mbastiaan.nl
Re: self.builder in ene functie niet beschikbaar, maar in andere wel
« Reactie #4 Gepost op: 2009/08/15, 20:17:25 »
Ik heb werkelijk geen idee hoe de functie aangeroepen wordt. Dit gebeurt door Rhythmbox. De code wordt gewoon aangeroepen door GTK. Hier even de "hele" broncode:
import gobject, gtk, gtk.glade
import os

class ConfigurationDialog(object):
    def __init__(self, glade_file, settings):
        self.settings = settings
        
        self.builder = gtk.Builder()
        self.builder.add_from_file(glade_file)
        
        signals = {"on_lyricConfig_response" : self.lyricConfig_response}
        self.builder.connect_signals(signals)
        
        self.dialog = self.builder.get_object("lyricConfig")
        
        self.host = self.builder.get_object("entryHost")
        self.port = self.builder.get_object("spinBtnPort")
        self.edit = self.builder.get_object("comboboxEdit")
        self.folder = self.builder.get_object("entry1")
        
        # Setting up the combobox
        items = [_(".. moet de computer vragen wat te doen"),
                 _(".. automatisch de aangepaste songtekst opsturen"),
                 _(".. automatisch de aangepaste songtekst NIET opsturen")]
        self.set_model_from_list(self.edit, items)
        
        upload = self.settings.get()['upload']
        if upload == None:
            self.edit.set_active(0)
        elif upload == True:
            self.edit.set_active(1)
        elif upload == False:
            self.edit.set_active(2)
        else:
            self.edit.set_active(0)
            
        # Setting up 'save in...'
        folder = self.settings.get()['folder']
        folder_verbose = folder.replace(os.getenv("HOME"), '~')
        
        self.folder.set_text(folder_verbose)
                  
    def get_dialog (self):
        print(self)
        print(self.builder)
        
        return self.dialog
    
    def lyricConfig_response(self, dialog, signal):
        print(self)
        print(self.builder)
        
        # Responsecodes:
        # -4: Destroy
        # 0: User clicked 'close'
        if signal == -4 or signal == 0:
            print(_("Configuratie opslaan"))
            self.save_settings()
            print(_("Configuratiescherm sluiten"))
            self.dialog.destroy()
        else:
            print(_('Het configuratieschermpje gaf een onbekende signaalcode terug: %s') % signal)
Zoals je ziet gebeuren er geen wereldschokkende dingen.

Het programma wordt zeker open-source, ik hoop zelfs dat het de originele songtekst-plugin gaat vervangen! Het probleem met de huidige plugin is namelijk dat je erg lang moet wachten en dat het op een onlogische plaats zit.

Mijn plugin komt gewoon in de toolbar te staan en kan een songtekst binnen 0.2 seconden ophalen van de server. Ach, jullie zien het vanzelf wel ;).

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: self.builder in ene functie niet beschikbaar, maar in andere wel
« Reactie #5 Gepost op: 2009/08/15, 23:06:19 »
Heb de relevante code eens nagemaakt en getest.. werkt prima hier...
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline MartijnB

  • Lid
    • http://www.mbastiaan.nl
Re: self.builder in ene functie niet beschikbaar, maar in andere wel
« Reactie #6 Gepost op: 2009/08/16, 08:20:12 »
Hmm, zodra ik de code 'gewoon' uitvoer gaat alles prima, maar zodra ik het in Rhythmbox uitvoer werkt het niet. Dat ga ik eens even vragen aan de dev's ;).

Offline MartijnB

  • Lid
    • http://www.mbastiaan.nl
Re: self.builder in ene functie niet beschikbaar, maar in andere wel
« Reactie #7 Gepost op: 2009/08/16, 11:46:22 »
Oké, ik wilde het nét gaan vragen aan de dev's, toen ik de meest stomme fout ooit in mijn code zag :-[. Probleem opgelost iig.