Fehler nach Gtkswitch einfügung

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Natz
User
Beiträge: 18
Registriert: Montag 30. Dezember 2013, 18:03

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
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@Natz: welche Version von GTK und Glade benutzt Du?
Natz
User
Beiträge: 18
Registriert: Montag 30. Dezember 2013, 18:03

@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
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@Natz: und für GTkSwitch brauchst Du GTk 3.x.
Natz
User
Beiträge: 18
Registriert: Montag 30. Dezember 2013, 18:03

@Sirius3: habe gerade mal die Pakete: gtk+3.0 libgtk-3-0 und libgtk-3-dev installiert. Leider immer noch das gleiche.
BlackJack

@Natz: Und was hast Du am Python-Programm geändert? Erstell doch mal ein lauffähiges Minimalbeispiel.
Natz
User
Beiträge: 18
Registriert: Montag 30. Dezember 2013, 18:03

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.
BlackJack

@Natz: Das `gtk`-Modul ist für Gtk2. Gtk3 wird über das `gi`-Modul benutzt.
Natz
User
Beiträge: 18
Registriert: Montag 30. Dezember 2013, 18:03

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:
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>
Natz
User
Beiträge: 18
Registriert: Montag 30. Dezember 2013, 18:03

@ BlackJack: vielen vielen Dank!!!!!!!! Hast mir das Jahr gerettet :mrgreen:

wünsche Euch einen guten Rutsch!!!!
Antworten