Ausgabefenster ausdrucken

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Python1906
User
Beiträge: 29
Registriert: Mittwoch 9. November 2016, 13:52

Hallo,

ich versuche seit kurzem mit Python ein Stundenplanprogramm zu erzeugen, welcher wenn, man auf einem Button klickt, das Fenster, indem man den Stundenplan erstellt, druckt. Ich habe auch schon versucht Lösungswege zu googlen, jedoch ohne Erfolg.

Mein Problem ist, dass ich nicht weiß, wie ich das Fenster drucken soll.

Für die GUI nutze ich Tkinter.

Kann mir jemand einen Lösungsweg zeigen, bzw. Seiten, auf denen ich Lösung finde (oder auch den nötigen Befehl nennen).
BlackJack

@Python1906: Drucken ist stark von Betriebssystem abhängig. Und man druckt normalerweise auch nicht da was im Fenster angezeigt wird, sondern bereitet diese Daten noch einmal speziell für den Druck auf. Eventuell ist es einfacher wenn Dein Programm ein Dokument erstellt, das der Anwender dann drucken kann. Verhältnismässig einfach lässt sich beispielsweise ein HTML-Dokument erstellen, das der Anwender dann vom Browser aus ausdrucken kann. Stundenpläne für die Uni habe ich damals beispielsweise immer als HTML erstellt und teilweise dann auch ausgedruckt.

Man könnte sich XHTML mit `xml.etree.ElementTree` zusammenbasteln, oder das externe `lxml`-Package mit dem `builder`-Modul dafür verwenden. Oder man installiert sich eine Template-Engine wie Jinja2 damit nicht alles programmatisch erstellen muss.

Eine Alternative wäre die Erstellung eines PDF-Dokuments, beispielsweise mit der `reportlab`-Bibliothek.

Oder man verwendet ein GUI-Rahmenwerk das auch drucken unterstützt. Zum Beispiel Qt.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Stimmt alles, was BlackJack schrieb. Ein Stundenplan möchte ja ein formatierter Ausdruck sein und dazu hatte ich mal Beispiele in C gesehen. In den Beispielen wurde wohl, wenn ich mich richtig erinnern sollte, alles was jetzt ein Schreibprogramm im Hintergrund berechnet, für einen Ausdruck ebenfalls berechnet.

Nur für einen Testausdruck mit Python unter Windows 10 habe ich mal das zweite Beispiel von der verlinkten Seite probiert, hat zumindest bei mir funktioniert:

Code: Alles auswählen

import tempfile
import win32api
import win32print

filename = tempfile.mktemp(".txt")
open(filename, "w").write("This is a test")
win32api.ShellExecute(
  0,
  "printto",
  filename,
  '"%s"' % win32print.GetDefaultPrinter(),
  ".",
  0
)
http://timgolden.me.uk/python/win32_how_do_i/print.html
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo Melewo,

Das könnte etwas für dich sein --> http://effbot.org/tkinterbook/canvas.ht ... ipt-method

Gruß Frank
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Noch einen kleinen Test gemacht. Wenn die Zeilenlänge in der TXT der Druckausgabe entspricht, sollte es eventuell für sehr einfache Ausdrucke unter Windows genügen.

Code: Alles auswählen

import win32api
import win32print
import os

filename = os.path.normcase("C:/.../datei.txt")

win32api.ShellExecute(
  0,
  "printto",
  filename,
  '"%s"' % win32print.GetDefaultPrinter(),
  ".",
  0
)
Habe es nur mit einem längeren Platzhaltertext getestet.

[codebox=text file=Unbenannt.txt]Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.[/code]
Python1906
User
Beiträge: 29
Registriert: Mittwoch 9. November 2016, 13:52

@Black Jack:

Vielen Dank für Ihre Antwort.
Ich werde mal bei den Bibliotheken drunter schauen.

Auf HTML, wäre ich ehrlich gesagt nicht gekommen.
Mit XHTML kenne ich mich leider nicht aus.

@alle Antwoten:

Danke für eure Antworten.
Ich wusste nicht, dass es vom Betriebssystem abhängig ist.
Ich benutze die neuste Version von Kubuntu.

Jedoch hätte ich noch eine Frage.

Wenn ich mit Python eine HTML-Datei erstelle, welche vom User gedruckt werden kann, was ist dann vom Betriebssystem untereinander unterschiedlich,
denn Python ist, ja davon unabhängig und HTML wüsste ich auch nicht.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

HTML drucke ich sehr selten direkt vom Browser, meisten markiere ich nur die Artikel, kopiere diese dann nach MS Word und befreie die von unnötigem Ballast, falls noch welcher vorhanden sein sollte. Gut, so ein Stundenplan sollte ja eigentlich derartigen Ballast nicht enthalten, wie er bei Webseiten üblich ist. Unterschiede gibt es bei den Browsern und wenn Du den gleichen Blocksatz in Firefox, Chrome und IE einfügst, so werden sich in allen drei Browser unterschiedliche Zeilenumbrüche ergeben. Ich könnte jetzt aber nicht sagen, in wieweit sich diese Unterschiede bei Ausdrücken bemerkbar machen, doch letztendlich geht nichts über PDF in dieser Beziehung.

Hatte mich am Wochenende lediglich mit PyPDF2 beschäftigt, weil mich mehr das Zusammenführen von mehreren PDFs interessierte und das ging damit spielend einfach. Danach hatte ich mir angeschaut, was es sonst noch gibt und da bin ich mir noch nicht sicher. Für das was ich vorhatte, da benötige ich dieses ganze Zeug mit Formularen nicht und Du ja sicherlich auch nicht für Stundenpläne.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@Python1906: bei HTML brauchst Du noch einen Browser, der sich um das Drucken kümmert (was anscheinend nicht ganz so einfach ist). Bei pdf unter Linux ist das dagegen kein Problem. Alternativ gibt es auch noch libre-office, das häufig schon installiert ist. Am Schluß steht aber immer ein Programm, das das tatsächliche Drucken erledigt, und das ist betriebssystemabhängig, bzw. muß in der passenden Version schon installiert sein.

Ich würde versuchen, möglichst wenig Abhängigkeiten einzubauen, das heißt, die Oberfläche auch in HTML zu programmieren und das Drucken dem Browser zu überlassen.
Python1906
User
Beiträge: 29
Registriert: Mittwoch 9. November 2016, 13:52

@sirius3:

Ah :o vesrstehe. Ok vielen Dank für eure Hilfe
Antworten