scribus/python/Qt

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Klaus2002
User
Beiträge: 2
Registriert: Montag 20. Januar 2014, 08:06

Hi

Ich versuche gerade ein StartUp-Script für scribus zu schreiben. In der scribus-Dokumentation findet sich folgender Beispielcode:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf8 -*-

"""
This script is a simple example to show how you can trigger things based on
event hooks provided by Scribus. This sample runs the `gotSignal' method
when the app has finished setting up and it emits the appStarted() signal.
This is useful if, for example, you need access to the main window to
do your setup when running as a startup script.

This script isn't very interesting unless you run it as a startup script,
with Scribus running in an xterm, and watch the output on stdout/stderr.

You will need PyQt for this script to work.
"""

try:
    import qt
except:
    print "Seems you don't have PyQt. Doing nothing."
    return

from qt import SIGNAL, PYSIGNAL, SLOT

# Note that to connect to signals etc you MUST inherit from QObject or a subclass
# of QObject.
class Recipient(qt.QObject):

    def __init__(self):
        # Connect ourselves to the "appStarted()" signal emitted by Scribus.
        # Ask PyQt to run the self.gotSignal method when the signal is emitted.
        self.connect(qt.qApp, SIGNAL("appStarted()"), self.gotSignal)

    def gotSignal(self):
        print "PONG!"

if __name__ == '__main__':
    recip = Recipient();
Nun bekomme ich bei "import qt" eine Fehlermeldung. Installiert ist python-qt4. Daher habe ich versucht das Script auf die verwendete PyQt4-Version anzupassen.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf8 -*-
 
import sys
import scribus
from PyQt4 import QtGui, QtCore
 
# Note that to connect to signals etc you MUST inherit from QObject or a subclass
# of QObject.
class Recipient(QtCore.QObject):
     
    def __init__(self):
        print "Test Self"
        # Connect ourselves to the "appStarted()" signal emitted by Scribus.
        # Ask PyQt to run the self.gotSignal method when the signal is emitted.
        self.connect(QtGui.qApp, QtCore.SIGNAL("appStarted()"), self.gotSignal)
     
    def gotSignal(self):
        print "Test Signal"
        scribus.openDoc("/home/foo/Dokument-1.sla")
 
if __name__ == '__main__':
    print "Test Start"
    recip = Recipient();
Jetzt erhalte ich folgende Fehlermeldung.

Code: Alles auswählen

Traceback (most recent call last):
  File "", line 8, in
  File "/home/scribus/startup_hook.py", line 17, in
     import atexit
ImportError: No module named atexit
Ich gehe davon aus, dass es ein Problem zwischen der von mir verwendeten Qt-Version, der PyQt-Version und der Qt-Version gegen die scribus kompiliert wurde besteht.
Ist meine Vermutung richtig? Kann mir bitte jemand auf die Sprünge helfen um das Script noch zum Laufen zu bekommen.

Vielen Dank
Klaus2002
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

Die Fehlermeldung ist recht eindeutig: bei dir fehlt, aus welchem Grund auch immer, das atexit-Modul. Das ist eigentlich Teil der Standardbibliothek und sollte dabei sein. Wie genau startest du denn dein Programm, welchen Interpreter verwendest du und welche Python-Version benutzt du?
Das Leben ist wie ein Tennisball.
Klaus2002
User
Beiträge: 2
Registriert: Montag 20. Januar 2014, 08:06

Zu meinem Problem muss man auch wissen, dass es 2 Möglichkeiten gibt INNERHALB von scribus Python-Scripte auszuführen. Der erst Weg ist über eine Menüpunkt "Script ausführen" das jeweilige Python-Script zu starten. Die zweite Möglichkeit besteht darin, in den Programmeinstellungen ein "Autostart-Script" zu hinterlegen. Dieses wird halt bei jedem Starten automatisch ausgeführt.

Ich brauche die zweite Variante - also das Autostart-Script.

Wenn ich das Script allerdings mit der ersten Variante starte, erhalte ich die erwähnte Fehlermeldung nicht. (Logischerweise bleibt das Script dann bei self.connect(QtGui.qApp, QtCore.SIGNAL("appStarted()"), self.gotSignal) stehen, schließlich ist scribus schon gestartet.) Daher verstehe in nicht warum atexit mir fehlen sollte.

Hier die gewünschten Infos:

Code: Alles auswählen

# python --version
Python 2.7.3
Antworten