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

Oder ein Denkanstoß für gehanfänger

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
wünsche Euch einen guten Rutsch!!!!