Hallo,
hab das Forum durchsucht und mittlerweile auch das Internet, aber ich verstehe das Drucken in wxPython immer noch nicht.
Text drucken ist ja kein Problem, aber ich muss praktisch ein bestimmtes Bild (mit wx.Dc erstellt) und damit verbundene Zahlen, irgendwie ausdrucken.
Alles zusammen ist auf einem Panel abgebildet, aber ich habe noch nicht herausgefunden, ob oder wie man Panels drucken kann.
Hoffe irgendjemand hat eine Antwort für mich! Bin bis jetzt durch alles in WX durchgestiegen, aber drucken scheint eine Unmöglichkeit zu sein
Danke im voraus!
MFG Bauer
Drucken in wxPython
Hallo Jack,
Irrtum, Drucken ist mit wx sogar sehr angenehm zu machen, hab aber auch ein Weilchen gebraucht bis ich das verstanden habe.
Schaue folgenden Code:
Im vorliegenden Fall wird der Inhalt eines TextCtrl gedruckt, geht zwar besser, aber läuft. Wichtig zum Drucken in wx sind die Klassen Printer und Printout. Schau mal in die wx Demos (PrintFramework) und in die Dokumentation, hat mir auch sehr geholfen.
Über den DC kannst du ausgeben was du möchtest und den hast du ja. Also müsstest du nur noch diesen DC auf den Printer umleiten, sollte doch gehen...
Gruß,
Markus
Irrtum, Drucken ist mit wx sogar sehr angenehm zu machen, hab aber auch ein Weilchen gebraucht bis ich das verstanden habe.
Schaue folgenden Code:
Code: Alles auswählen
class CTSPrintout( wx.Printout ):
def __init__(self, text, header, flag):
wx.Printout.__init__(self)
self.text = text
self.header = header
#Erg-Log (0)/ CTS-Log (1)
self.flag = flag
self.anz_pages = 1
def make_lines(self):
back_lines = []
zeilen_list = string.split(self.text,"\n")
counter = 0
if (self.flag == 0): #Erg Log
erg_lines = []
for zeile in zeilen_list:
data_list = []
if not "Gesamtergebnis" in zeile:
temp_list = string.split(zeile, " ")
for temp in temp_list:
if (temp != ""):
data_list.append(temp)
else:
data_list.append(string.lstrip(zeile))
if (data_list != []):
erg_lines.append(data_list)
counter += 1
if (counter == 46):
self.anz_pages += 1
counter = 0
if (counter != 0): self.anz_pages += 1
for erg_line in erg_lines:
temp = ""
for eintrag in erg_line:
if ((eintrag == "Testergebnis:") or (eintrag == "Dauer:")):
back_lines.append(temp)
temp = ""
temp = string.ljust(temp,50)
if "Gesamtergebnis:" in eintrag:
back_lines.append("")
temp += eintrag + " "
back_lines.append(temp)
else: #CTS log
for zeile in zeilen_list:
zaehler = 0
temp = ""
for c in zeile:
if (zaehler < 80): temp += c
else:
back_lines.append(temp)
temp = str(c)
zaehler = -1
counter += 1
if (counter == 46):
self.anz_pages += 1
counter = 0
zaehler += 1
back_lines.append(temp)
counter += 1
if (counter == 46):
self.anz_pages += 1
counter = 0
return back_lines
def OnBeginDocument(self, startPage, endPage):
pass
def OnPrintPage(self, page):
lines = self.make_lines()
dc = self.GetDC()
if (self.flag == 0):
#Erg Log
dc.StartDoc("CTS_ErgebnisLog")
else:
#CTS Log
dc.StartDoc("CTS_Log")
dc.StartPage()
#Header schreiben
dc.DrawText(self.header , 100, 100)
msg = "Seite 1 von " + str(self.anz_pages)
dc.DrawText(msg, 100, 230)
x = 450
y = 600
counter = 0
page_count = 2
for line in lines:
dc.DrawText(line, x, y)
y += 130
counter += 1
if (counter == 46):
dc.EndPage()
dc.StartPage()
counter = 0
dc.DrawText(self.header , 100, 100)
msg = "Seite " + str(page_count) + " von " + str(self.anz_pages)
dc.DrawText(msg, 100, 230)
page_count += 1
y = 600
dc.EndDoc()
return True
Über den DC kannst du ausgeben was du möchtest und den hast du ja. Also müsstest du nur noch diesen DC auf den Printer umleiten, sollte doch gehen...
Gruß,
Markus
Danke für die schnelle Antwort.
Ich habe mir Demo angeschaut, komme aber immer noch nicht weiter, denn wie schon erwähnt:
Ich will ja nicht nur Text drucken, sondern beides zusammen! Der Befehlt für Text ist "drawText", und der kriegt nen String übergeben, soweit bin ich jetzt auch schon. Aber in der Demo wird irgendwie ein Canvas übergeben mit dem Befehl "self.canvas.DoDrawing(dc, True)".
Das ganze liegt bei mir aber auf einem "dc=wx.PaintDC(self.panel)".
Ich hab versucht der Funktioin" DoDrwaing" direkt das "PaintDC" zu übergeben, das hat aber nicht funktioniert!
MFG Bauer
Ich habe mir Demo angeschaut, komme aber immer noch nicht weiter, denn wie schon erwähnt:
Ich will ja nicht nur Text drucken, sondern beides zusammen! Der Befehlt für Text ist "drawText", und der kriegt nen String übergeben, soweit bin ich jetzt auch schon. Aber in der Demo wird irgendwie ein Canvas übergeben mit dem Befehl "self.canvas.DoDrawing(dc, True)".
Das ganze liegt bei mir aber auf einem "dc=wx.PaintDC(self.panel)".
Ich hab versucht der Funktioin" DoDrwaing" direkt das "PaintDC" zu übergeben, das hat aber nicht funktioniert!
MFG Bauer