PySide: QPrintDialog in Linux nutzen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
AlphaX2
User
Beiträge: 53
Registriert: Dienstag 28. Juni 2011, 10:42

Hallo Python-Freunde,

ich hab schon hier im Forum und bei Google gesucht, aber nichts gefunden. Ich bin mir nicht sicher, ob ich etwas falsch mache, oder ob der QPrintDialog (PySide 1.1.0) in Linux (Fedora 19) einfach eine Macke hat. Konkrett sind mir zwei Dinge aufgefallen:

1. Wenn ich versuche die Options zu setzen, dann hat das scheinbar keinerlei Einfluss. Weil einfach alles, immer aktiv bleibt.
2. Nach dem Akzeptieren des Dialogs (als "Drucken" wird gedrückt, sollte der QPrinter ja eigentlich auf die richtigen Einstellungen gesetzt werden, was aber auch nicht passiert.

Anbei noch ein Minimal-Beispiel:

Code: Alles auswählen

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

import sys
from PySide import QtGui

app = QtGui.QApplication(sys.argv)

pDialog = QtGui.QPrintDialog(parent=None)

# Werden einfach trotzdem angezeigt
pDialog.setOption(QtGui.QAbstractPrintDialog.PrintToFile, False)
pDialog.setOption(QtGui.QAbstractPrintDialog.PrintSelection, False)
pDialog.setOption(QtGui.QAbstractPrintDialog.PrintCollateCopies, False)

if pDialog.exec_() == QtGui.QDialog.Accepted:
    p = pDialog.printer()

    # Einstellungen wurden nicht übernommen
    print p
    print p.paperSize()
    print p.orientation()
    print p.printRange()
    print p.colorMode()

app.exec_(sys.exit())
EDIT:
Ich habe das Ganze jetzt noch unter Ubuntu 12.10 (ebenfalls PySide 1.1.0) getestet und es tritt der selbe Fehler auf. In Windows funktioniert der Dialog (ist aber scheinbar ein Windows eigener Dialog). Nutzt man PyQt4 mit obrigem Code läuft alles wunderbar. Folglich nehme ich an, dass es sich um einen Bug handelt, diesen habe ich im Qt Bugtracker auch berichtet: https://bugreports.qt-project.org/browse/PYSIDE-196

Erfeulich wäre es, wenn jemand bereits einen eigenen PrintDialog geschrieben hat, dann würde ich gern den entsprechenden Code verwenden. ;)

Vielen Dank. AlphaX2
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@AlphaX2:
Mit PyQt4 unter opensuse funktioniert Dein Code. Möglicherweise ist es ein Bug in PySide (hab ich nicht zur Hand).
BlackJack

Nur so als zusätzlicher Datenpunkt: Ich kann den Unterschied zwischen PySide und PyQt4 unter Linux bestätigen.
AlphaX2
User
Beiträge: 53
Registriert: Dienstag 28. Juni 2011, 10:42

Übrigens scheint der Dialog aber auch in PyQt4 nicht ganz fehlerfrei zu arbeiten. :(

Daher meine Frage, gibt es eine Möglichkeit, die im Linux bekannten Drucker selbst irgendwie abzufragen, dann könnte man sich ja selbst einen entsprechenden Dialog zusammen bauen. Mit QPrinter lässt sich aber nur der Default Drucker finden. Jemand eine Idee? :K

Danke!
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@AlphaX2:
Bei mir geht das mit:

Code: Alles auswählen

>>> from PyQt4 import QtGui
>>> for p in QtGui.QPrinterInfo.availablePrinters():
...   print p.printerName()
... 
Kyocera-Mita-FS-1030D
Wenn das bei Dir nicht funktioniert, ist höchstwahrscheinlich Deine Installation kaputt. Habs grad nochmal mit Ubuntu 12.04, PyQt4 und Python 2.7 getestet.
AlphaX2
User
Beiträge: 53
Registriert: Dienstag 28. Juni 2011, 10:42

Okay, das klappt auch mit PySide vernünftig. Aber ich hab die QPrinterInfo Klasse schlicht völlig übersehen! :) Vielen Dank für die Info!

AlphaX2
Antworten