TypeError: ... 'cairo.context'

Probleme bei der Installation?
Antworten
Photor
User
Beiträge: 11
Registriert: Freitag 6. August 2010, 21:11

Hallo Forum,

ich will ein Programm mit matplotlib und Gtk3-GUI schreiben. Dazu will ich mich mit dem Tutorial beschäftigen. Bei dem Beispiel aus Kap 1.2 (Code wollte ich hier nicht wiederholen) erhalte ich allerdings keine Grafik im Gtk3-Fenster - das Fenster ist einfach leer. In der Konsole finde ich folgenden Output:

Code: Alles auswählen

[photor@Picard Rainflow.GIT]$ python test.py 
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/matplotlib/backends/backend_gtk3.py", line 339, in idle_draw
    self.draw()
[... viele gleichartige Zeilen gelöscht ...]
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/matplotlib/backends/backend_gtk3.py", line 339, in idle_draw
    self.draw()
  File "/usr/lib/python3.4/site-packages/matplotlib/backends/backend_gtk3.py", line 334, in draw
    self.get_property("window").process_updates (False)
TypeError: Couldn't find foreign struct converter for 'cairo.Context'
allerdings erst, wenn ich das Fenster in der Größe ändere (einen Handler gibt es dafür auch nicht). Die Fehlermeldung deutet aber trotzdem darauf hin, dass beim "draw" bzw "idle_draw" im Zusammenhang mit Cairo etwas schief läuft.

Die Frage ist, warum sehe ich die versprochene Grafik nicht und, hat die obige Ausgabe etwas damit zu tun? Wie bekomme ich MatPlotLib zusammen mit Gtk3 in ein Python3-Programm. Die im Tutorial angegebenen Arch-Pakete sind installiert; vielleicht fehlt aber noch eins (oder ist falsch konfiguriert).
"Ihr seid so, wie sie wollen, dass ihr seid und sie wollen, dass ihr bleibt wie ihr seid alle Zeit" -- Dritte Wahl
BlackJack

@Photor: Ist `libcairo` denn installiert und die dazugehörigen GObject-Introspection-Daten?
Photor
User
Beiträge: 11
Registriert: Freitag 6. August 2010, 21:11

Hallo BlackJack,

ein extra Paket für libcairo scheint es nicht zu geben. Aber

Code: Alles auswählen

[root@Picard ~]# locate libcairo
/usr/lib/libcairo-gobject.so
/usr/lib/libcairo-gobject.so.2
/usr/lib/libcairo-gobject.so.2.11400.0
/usr/lib/libcairo-script-interpreter.so
/usr/lib/libcairo-script-interpreter.so.2
/usr/lib/libcairo-script-interpreter.so.2.11400.0
/usr/lib/libcairo.so
/usr/lib/libcairo.so.2
/usr/lib/libcairo.so.2.11400.0
/usr/lib/libcairomm-1.0.so
/usr/lib/libcairomm-1.0.so.1
/usr/lib/libcairomm-1.0.so.1.4.0
/usr/lib/cairo/libcairo-trace.so
/usr/lib/cairo/libcairo-trace.so.0
/usr/lib/cairo/libcairo-trace.so.0.0.0
/usr/lib/libreoffice/program/libcairocanvaslo.so
scheint da (ob die Versionen passen, weiß ich allerdings nicht?). Aber:

Code: Alles auswählen

[root@Picard ~]# locate introspection |grep cairo
[root@Picard ~]# 
Hm.

Ich habe natürlich noch weiter probiert: wenn ich mit Glade eine GUI erstelle (wie im Tutorial beschrieben) und das Programm starte, dann terminiert das Programm auch nach Schließen des Hauptfensters nicht (bei Start im Terminal hilft nur ein "kill").

Könnte natürlich auch was ArchLinux-spezifisches sein. Werde dort auch nochmal nachfragen.

Ciao,

Photor
"Ihr seid so, wie sie wollen, dass ihr seid und sie wollen, dass ihr bleibt wie ihr seid alle Zeit" -- Dritte Wahl
Photor
User
Beiträge: 11
Registriert: Freitag 6. August 2010, 21:11

Ein Nachtrag: ich habe das Test-Script aus dem Tutorial in PyCharm eingegeben, um die Vorzüge der IDE gegenüber einem einfachen Editor zu nutzen, und ich bekomme dort

Code: Alles auswählen

#!/usr/bin/python3

from gi.repository import Gtk
[...]
eine rote Schlangenlinie unter dem "Gtk" mit der Info: "This inspection detects names that should resolve but don't. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases. Top-level and class-level items are supported better than instance items." , was andeuten könnte(!), dass er "Gtk" oder "gi.repository" nicht kennt. Allerdings verstehe ich dann nicht, warum er das leere Fenster zeigt (also den Gtk-Teil) und der Cairo-Teil fehlt.

Ich bin etwas verwirrt.

Photor
"Ihr seid so, wie sie wollen, dass ihr seid und sie wollen, dass ihr bleibt wie ihr seid alle Zeit" -- Dritte Wahl
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Photor: IDEs können bei Python nur raten, und raten eben nicht immer 100% richtig. Es reicht auch nicht, dass irgendwo cairo-Bibliotheken rumliegen, Du mußt Gtk3 schon auch mit cairo-Unterstützung erzeugt haben.
Photor
User
Beiträge: 11
Registriert: Freitag 6. August 2010, 21:11

Moin Sirius,
Sirius3 hat geschrieben:@Photor: IDEs können bei Python nur raten, und raten eben nicht immer 100% richtig.

Das ist auch mein Schluss: wenn Gtk tatsächlich nicht da wäre, würde das Programm den Teil ja nicht ausführen können. Ich betrachte die IDE (PyCharm) auch nur als Hilfe/Unterstützung.
Sirius3 hat geschrieben:Es reicht auch nicht, dass irgendwo cairo-Bibliotheken rumliegen, Du mußt Gtk3 schon auch mit cairo-Unterstützung erzeugt haben.
Hm. Ich dachte/denke, dass, wenn ich im Paketmanagementsystem meiner Distribution (Archlinux) bleibe, dass ich mich darum nicht kümmern müsste. Ich habe den Verdacht, dass die Reihenfolge, in der ich installiere, vielleicht einen Einfluss hat. Ich habe gesehen, dass auch python2-cairo (wird leider für Gimp gebraucht) installiert ist; ob das aber einen Einfluss hat?

Ich probiere weter und bericht (wenn's gewünscht ist),

Ciao,

Photor
"Ihr seid so, wie sie wollen, dass ihr seid und sie wollen, dass ihr bleibt wie ihr seid alle Zeit" -- Dritte Wahl
neoxx
User
Beiträge: 1
Registriert: Montag 9. März 2015, 15:34

unter archlinux:

python-cairo installiert?
python-cairocffi installiert?

hat bei mir zumindest gereicht um den fehler zu beheben…
Antworten