Seite 1 von 1

Fehler nach Gtkswitch einfügung

Verfasst: Montag 30. Dezember 2013, 18:14
von Natz
Hallo,
beschäftige mich erst seit 3Wochen mit Python um ein kleines Projekt zu verwirklichen.
Habe mit Glade eine kleine GUI gebastellt mit der ich ein paar Geräte an meinem Terrarium schalten möchte.
Nun das mit dem schalten aus der GUI habe ich hin bekommen. Was mir noch fehlt ist eine Zustandsanzeige - also Ein oder Aus.
Habe es erst mit ein und ausblenden von Icons und Buttons versucht. Bin aber leider durch das Python TUT nicht durchgestiegen.
Also wollte ich es mir einfach machen und ein Switch button einfügen. Somit hätte ich immer die Anzeige des Aktuellen schaltzustandes.
Wenn ich nun aber das Script starte kommt immer diese Fehlermeldung:

glib.GError: Invalid object type `GtkSwitch'

Es liegt eindeutig an dem switch button. Ohne diesen Läufts.
Denke es fehlt irgend eine lib aber als Linux noob weiss ich leider nicht welche.
Hoffe Ihr könnt mir da weiter helfen. Bin schon seit 2Tagen dran :-(
gruss Natz

Re: Fehler nach Gtkswitch einfügung

Verfasst: Montag 30. Dezember 2013, 18:40
von Sirius3
@Natz: welche Version von GTK und Glade benutzt Du?

Re: Fehler nach Gtkswitch einfügung

Verfasst: Montag 30. Dezember 2013, 19:00
von Natz
@Sirius3

also Glade ist Version 3.12.1.
Für Gtk habe ich mal die gtklib2.0-dev installiert. Wie ich an die genaue Version komme weiss ich leider nicht. Wie gesagt sonst Windows user ;-)
System ist Ubuntu 12.04

habs doch noch:
dpkg -l libgtk[0-9]* | grep ^i
ii libgtk2-perl 2:1.223-1build3 Perl interface to the 2.x series of the Gimp Toolkit library
ii libgtk2.0-0 2.24.10-0ubuntu6 GTK+ graphical user interface library
ii libgtk2.0-bin 2.24.10-0ubuntu6 programs for the GTK+ graphical user interface library
ii libgtk2.0-common 2.24.10-0ubuntu6 common files for the GTK+ graphical user interface library
ii libgtk2.0-dev 2.24.10-0ubuntu6 development files for the GTK+ library

Re: Fehler nach Gtkswitch einfügung

Verfasst: Montag 30. Dezember 2013, 19:11
von Sirius3
@Natz: und für GTkSwitch brauchst Du GTk 3.x.

Re: Fehler nach Gtkswitch einfügung

Verfasst: Montag 30. Dezember 2013, 19:40
von Natz
@Sirius3: habe gerade mal die Pakete: gtk+3.0 libgtk-3-0 und libgtk-3-dev installiert. Leider immer noch das gleiche.

Re: Fehler nach Gtkswitch einfügung

Verfasst: Montag 30. Dezember 2013, 20:37
von BlackJack
@Natz: Und was hast Du am Python-Programm geändert? Erstell doch mal ein lauffähiges Minimalbeispiel.

Re: Fehler nach Gtkswitch einfügung

Verfasst: Montag 30. Dezember 2013, 22:53
von Natz
Ich erstelle eine Neue Glade GUI mit einem Window und einem Switch Button.
Öffne diese mit diesem Python srcipt:

Code: Alles auswählen

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import gtk



class MyApp(object):
    def __init__(self):
        self.builder = gtk.Builder()  
	self.builder.add_from_file("Window.glade")
        self.builder.connect_signals(self)
    	
    def obj(self, name):
    	"""
	Gibt Glade-Object 'name' zurück
	"""
        return self.builder.get_object(name)

    def run(self):
        """
	Startet die zentrale Warteschleife von Gtk
	"""
        try:
            gtk.main()
        except KeyboardInterrupt:
            pass
   
    		
    def quit(self):
        """
        Verlässt die zentrale Warteschleife von Gtk

	"""
        gtk.main_quit()


###############################
Die GUI sollte ja auch ohne Signal-Behandlungsroutinen Laufen.
Bekomme sofort die folgende Fehlermeldung im Terminal.

Code: Alles auswählen

Traceback (most recent call last):
  File "Terra.py", line 148, in <module>
    app = MyApp()
  File "Terra.py", line 11, in __init__
    self.builder.add_from_file("Window.glade")
glib.GError: Invalid object type `GtkSwitch'
Wenn ich statt des Switch button ein anderen Button nehme dann Funktioniert es.

Re: Fehler nach Gtkswitch einfügung

Verfasst: Montag 30. Dezember 2013, 23:14
von BlackJack
@Natz: Das `gtk`-Modul ist für Gtk2. Gtk3 wird über das `gi`-Modul benutzt.

Re: Fehler nach Gtkswitch einfügung

Verfasst: Dienstag 31. Dezember 2013, 11:16
von Natz
Morgen und danke erstmal für Eure Hilfe ;-)

@BlackJack: Habe die Import Zeile mal so abgeändert.

Code: Alles auswählen

from gi.repository import Gtk
Nur leider kommt dann eine Fehlermeldung ! :K

Code: Alles auswählen

Traceback (most recent call last):
  File "Terra.py", line 146, in <module>
    app = MyApp()
  File "Terra.py", line 8, in __init__
    self.builder = gtk.Builder()  
NameError: global name 'gtk' is not defined
Bin mit so etwas echt überfordert. Bin schon wieder Stunden am probieren und Googlen.
Habe schon genug mit der Button verlinkung etc. zu kämpfen als Anfänger :oops:
Könnte mir vielleicht einer von Euch das Script zum Importieren der Glade GUI in GTK3 umschreiben? Ist doch bestimmt schnell gemacht für Euch :mrgreen:
Oder ein Denkanstoß für gehanfänger :wink:

Re: Fehler nach Gtkswitch einfügung

Verfasst: Dienstag 31. Dezember 2013, 11:39
von BlackJack
@Natz: Der Denkanstoss ist das Python gross und Kleinschreibung unterscheidet. Natürlich gibt es den Namen `gtk` nicht wenn Du das ``import gtk`` heraus nimmst, wo sollte der Name denn dann auch herkommen.

Code: Alles auswählen

#!/usr/bin/env python
#-*- coding: utf-8 -*-
from gi.repository import Gtk
 
 
class Application(object):

    def __init__(self):
        builder = Gtk.Builder()  
        builder.add_from_file('test.glade')
        builder.connect_signals(self)
        self.window = builder.get_object('window1')
        
    def run(self):
        """Startet die Hauptschleife von Gtk."""
        self.window.show()
        Gtk.main()
   
    @staticmethod
    def quit(_window):
        """Verlässt die Hauptschleife von Gtk."""
        Gtk.main_quit()


def main():
    application = Application()
    application.run()


if __name__ == '__main__':
    main()
test.glade:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <!-- interface-requires gtk+ 3.0 -->
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <signal name="destroy" handler="quit" swapped="no"/>
    <child>
      <object class="GtkSwitch" id="switch1">
        <property name="use_action_appearance">False</property>
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="use_action_appearance">False</property>
      </object>
    </child>
  </object>
</interface>

Re: Fehler nach Gtkswitch einfügung

Verfasst: Dienstag 31. Dezember 2013, 12:23
von Natz
@ BlackJack: vielen vielen Dank!!!!!!!! Hast mir das Jahr gerettet :mrgreen:

wünsche Euch einen guten Rutsch!!!!