Seite 1 von 1
Drucken mit Nadeldrucker
Verfasst: Donnerstag 28. April 2011, 23:19
von tomkin
Hello!
Ich hab ein schönes Kassa-Programm für ein Kino geschrieben - mit Sitzplan, Reservierungen, Verkauf und allem drum und dran.. Schön.. Nun hab ich mir gedacht, naja, jetzt lass ich das Programm einfach noch mit dem Nadeldrucker die Eintrittskarten ausdrucken und fertig......
Ups...
Ups, ups...!!
Ja.. nun, bin ich draufgekommen, dass das mit Python und drucken nicht so einfach ist.
Eigentlich muss nur eine einzige Zeile pro Karte gedruckt werden. Und der Nadeldrucker muss von Karte zu Karte im richtigen Abstand weiterfahren.
Nach viel Suchen im Netz fand ich heraus, dass PyQt4, Python 3 und Drucken eine erfolgreiche Kombination sein könnten. Ich hab PyQt heruntergeladen, die Installerdatei (Win XP) ausgeführt und nun ... weiß ich keinen Meter mehr weiter. Ich mach Python noch nicht lange und PyQt überfordert mich nun völlig. Wie komm ich weiter? Kann mir irgendjemand helfen?
:K
Re: Drucken mit Nadeldrucker
Verfasst: Donnerstag 28. April 2011, 23:51
von BlackJack
@tomkin: Bei Nadeldruckern will man in der Regel eher Text als Grafik ausgeben und da würde ich wahrscheinlich versuchen den Drucker direkt anzusprechen.
Falls Grafikdruck doch okay ist, dann wäre ein GUI-Toolkit eine naheliegende Wahl. Am besten schaust Du erst einmal bei dem welches Du schon für die Anwendung verwendet hast. Oder ist der Sitzplan nicht "grafisch"?
Re: Drucken mit Nadeldrucker
Verfasst: Freitag 29. April 2011, 11:54
von tomkin
Danke für die Antwort..
Nun, ich habe den Sitzplan mit tkinter erstellt. Aber ich hab gelesen, dass man damit nicht (gut?) drucken kann.
Wie kann ich den Drucker direkt ansprechen? Und wie organisiere ich den Papierlauf in der passenden Länge?
Re: Drucken mit Nadeldrucker
Verfasst: Freitag 29. April 2011, 15:19
von tomkin
Hm.. keine Antworten.. anscheinend ist es echt etwas schwierig.
Wie mache ich mir mit PyQt ein A4-Blatt, das ich dann ausdrucken kann? Muss nämlich auch Berichte drucken.
Und wie starte ich dann den Druck?

Re: Drucken mit Nadeldrucker
Verfasst: Freitag 29. April 2011, 15:45
von lunar
Wieso liest Du nicht erst einmal die
Dokumentation zum Drucken in Qt? Dort und in der Dokumentation der entsprechenden Klassen sind auch Beispiele zu finden.
Re: Drucken mit Nadeldrucker
Verfasst: Freitag 29. April 2011, 15:51
von tomkin
Weil ich die bisher nicht gekannt habe, Qt nur vom "Hörensagen" im Internet kannte, es grad mal installiert habe ohne zu wissen, was es genau ist und wie es geht
Aber das hilft mir mal weiter. Danke!
Re: Drucken mit Nadeldrucker
Verfasst: Freitag 29. April 2011, 16:12
von BlackJack
@tomkin: Wenn da ein Nadeldrucker dran hängt, wo vorgedruckte Kinokarten mit Perforation zum Trennen der Karten und Randlochung für den Papiertransport bedruckt werden, weiss ich nicht ob das von einem der GUI-Toolkits hinreichend unterstützt wird. Endlospapier ist heutzutage ja eher exotisch.
Die meisten Nadeldrucker verstehen
ESC/P. Mit den Steuercodes und `pyserial` oder `pyparallel` kann man die also direkt damit ansteuern. Wenn einfacher Text reicht, wäre das eine Lösung ohne sich in ein neues GUI-Toolkit einarbeiten zu müssen.
In einem Programm kann man sowieso nicht so einfach verschiedene GUI-Toolkits verwenden. Wenn sich zwei Hauptschleifen um die Ereignisverarbeitung des Fenstersystems streiten, kommt in der Regel Murks dabei heraus.
Wenn Du also auf Qt zum Drucken setzen würdest, solltest Du gleich die gesamte Anwendung auf Qt portieren.
Re: Drucken mit Nadeldrucker
Verfasst: Freitag 29. April 2011, 16:16
von lunar
@BlackJack: Zum Drucken braucht man nicht unbedingt eine Hauptschleife. Es reicht, ein "QApplication"-Objekt zu erzeugen.
Re: Drucken mit Nadeldrucker
Verfasst: Samstag 30. April 2011, 15:08
von tomkin
So, ich hab's nun geschafft, dass ich mir mit Hilfe von PyQt meine Berichte ausrucke. Einziges Problem: Das Öffnen des Print-Dialogs verursacht einen Absturz des Programms. Nach Bestätigen des Dialogs wird gedruckt, aber die tkinter-Oberfläche lässt sich nicht weiter bedienen. Vielleicht ein Konflikt PyQt <-> tkinter? Es wird aber kein PyQt-Loop verwendet, nur tkinter mainloop().
Aber nun zu Punkt 2 - ESC/P:
Ich habe versucht, anhand des Codes von
http://de.wikipedia.org/wiki/ESC/P die dort angeführte Beispielgrafik zu drucken. Der Nadeldrucker tut aber leider überhaupt nichts.
Code:
Code: Alles auswählen
ser = serial.Serial(0)
text = "27 42 5 24 0 "
text += "0 7 15 31 62 124 120 113 241 225 224 224 224 224 225 241 113 120 124 62 31 15 7 0 "
text += "13 "
text += "27 74 24 "
text += "27 42 5 24 0 "
text += "255 255 255 129 0 0 0 195 195 195 1 1 1 1 195 195 195 0 0 0 129 255 255 255 "
text += "13 "
text += "27 74 24 "
text += "27 42 5 24 0 "
text += "0 224 240 248 124 62 30 142 143 199 199 199 199 199 199 143 142 30 62 124 248 240 224 0 "
text += "13 "
text += "27 74 24 "
ser.write(text.encode('utf-8'))
ser.close()
Was mache ich falsch?
Re: Drucken mit Nadeldrucker
Verfasst: Samstag 30. April 2011, 15:14
von lunar
Wenn Du Dialoge aus Qt verwendest, dann musst natürlich auch die Qt-Ereignisschleife laufen, und Du musst letztlich Dein ganzes Programm auf Qt portieren.
Re: Drucken mit Nadeldrucker
Verfasst: Samstag 30. April 2011, 17:44
von tomkin
Ich hab nun diese kurze Programm laufen lassen.
Code: Alles auswählen
from PyQt4.QtGui import *
from PyQt4.QtCore import *
text = "test"
app = QApplication(sys.argv)
font = QFont("Courier",12)
printer = QPrinter()
size=QSizeF(5.08, 5.08)
printer.setPaperSize(size, QPrinter.Millimeter)
doc = QTextDocument(text)
doc.setDefaultFont(font)
doc.print_(printer)
app.exec_()
Nach dem Drucken muss das Programm "gekilled" werden, damit der Curor in der Eingabezeile der Python Shell wieder blinkt. Muss ich Qt irgendwie schließen, damit von selbst alles vollständig beendet wird?