Hallo zusammen,
ich habe unter Qt4Py eine Applikation gebaut, die mit mehreren Tabellen arbeitet. Die Applikation erstellt Einrahmungs Aufträge, die in einer SQL3 DB abgespeichert werden. Das alles funktioniert hervorragend und sieht auch super aus.
Das Ganze ist natürlich kein Selbstzweck und keine Spielerei. In der Praxis brauche ich jetzt einen vernünftig formatierten Ausdruck jedes Auftrags als Beleg. Und da beginnt mein Problem. Wie kriege ich eine Tabelle programm gesteuert, genau so ausgedruckt, wie am Bildschirm angezeigt.
Alle Versuche mit Formatanweisung (u"%s...." usw.) führen selbst bei Unispace-Schriften nur zu sehr unschönen, schlecht formatierten Ausdrucken.
Hat jemand eine Idee, wie man Tabellen tabellarisch drucken kann? Mir schwebt ein Verfahren vor, wie ich es mit OpenOffice realisiert hatte. Dort kann ein Tabellen-Formular erzeugen, in dem man jede Zelle direkt adressieren kann. Aber ich will natürlich kein OOo verwenden.
Wie kann man Daten im Tabellenformat drucken?
- klaus66
- User
- Beiträge: 51
- Registriert: Mittwoch 11. März 2009, 09:26
- Wohnort: Bergisch Gladbach-Bensberg
Mit freundlichem Gruß Klaus
Das Geheimnis des Könnens liegt im Wollen!
Ubuntu 9.10 64Bit, AMD Athlon 64/Opteron 3200+, 1GB RAM, NVIDIA GeForce7, 250GB SATA 80GB USB und Asus Eee PC 4G mit Ubuntu-eee-8.04.1\\
Das Geheimnis des Könnens liegt im Wollen!
Ubuntu 9.10 64Bit, AMD Athlon 64/Opteron 3200+, 1GB RAM, NVIDIA GeForce7, 250GB SATA 80GB USB und Asus Eee PC 4G mit Ubuntu-eee-8.04.1\\
Hmmm... Bei Tabelle fällt mir als erstes immer HTML ein.
Du könntest deine ganzen Daten über eine <table> in ein QTextDocument packen. Hat den Vortiel, dass du auch noch nen (schön formatierten) Vorspann und Nachspann und sonstwas (z.B. weitere Tabellen ) mit einbinden kannst.
Wenn du einfach nur das Widget rendern willst, das geht natürlich auch
Ist natürlich nicht der Hit bei ner Tabelle
Du könntest deine ganzen Daten über eine <table> in ein QTextDocument packen. Hat den Vortiel, dass du auch noch nen (schön formatierten) Vorspann und Nachspann und sonstwas (z.B. weitere Tabellen ) mit einbinden kannst.
Wenn du einfach nur das Widget rendern willst, das geht natürlich auch
Code: Alles auswählen
t = QTableWidget(10,10)
p = QPrinter()
p.setOutputFormat(QPrinter.PdfFormat)
p.setOutputFileName("/tmp/test.pdf")
t.render(p)
- klaus66
- User
- Beiträge: 51
- Registriert: Mittwoch 11. März 2009, 09:26
- Wohnort: Bergisch Gladbach-Bensberg
@franzf,
danke, das war schon mal ein guter Hinweis, der mich möglicherweise auf die richte Spur gebracht hat.
Manchmal sitzt man vor dem Bildschirm und sieht den Wald vor lauter Bäumen nicht.
Nochmal danke,
danke, das war schon mal ein guter Hinweis, der mich möglicherweise auf die richte Spur gebracht hat.
Manchmal sitzt man vor dem Bildschirm und sieht den Wald vor lauter Bäumen nicht.
Nochmal danke,
Mit freundlichem Gruß Klaus
Das Geheimnis des Könnens liegt im Wollen!
Ubuntu 9.10 64Bit, AMD Athlon 64/Opteron 3200+, 1GB RAM, NVIDIA GeForce7, 250GB SATA 80GB USB und Asus Eee PC 4G mit Ubuntu-eee-8.04.1\\
Das Geheimnis des Könnens liegt im Wollen!
Ubuntu 9.10 64Bit, AMD Athlon 64/Opteron 3200+, 1GB RAM, NVIDIA GeForce7, 250GB SATA 80GB USB und Asus Eee PC 4G mit Ubuntu-eee-8.04.1\\
- klaus66
- User
- Beiträge: 51
- Registriert: Mittwoch 11. März 2009, 09:26
- Wohnort: Bergisch Gladbach-Bensberg
Ich fürchte ich brauche doch noch mal einen Anstoß, um weiter zu kommen. Ich schaffe es zwar den Beitext und die Tabelle zu drucken, aber immer auf einer separaten Seite. Das ist natürlich nicht das was ich will. Ich brauche ein druckbares Dokument, in dem sowohl der Text als auch die Tabelle als gerenderte Grafik enthalten ist.
Jetzt bemühe ich mich den Text und die Tabelle in ein QTextDocument einzufügen. Mit dem Text hab ich kein Problem. Nur bei der Tabelle kapier ich nicht, wie ich die in das QTextDocument einfügen kann.
Vielleicht kann mir mal jemand auf die Sprünge helfen.
Jetzt bemühe ich mich den Text und die Tabelle in ein QTextDocument einzufügen. Mit dem Text hab ich kein Problem. Nur bei der Tabelle kapier ich nicht, wie ich die in das QTextDocument einfügen kann.
Vielleicht kann mir mal jemand auf die Sprünge helfen.
Mit freundlichem Gruß Klaus
Das Geheimnis des Könnens liegt im Wollen!
Ubuntu 9.10 64Bit, AMD Athlon 64/Opteron 3200+, 1GB RAM, NVIDIA GeForce7, 250GB SATA 80GB USB und Asus Eee PC 4G mit Ubuntu-eee-8.04.1\\
Das Geheimnis des Könnens liegt im Wollen!
Ubuntu 9.10 64Bit, AMD Athlon 64/Opteron 3200+, 1GB RAM, NVIDIA GeForce7, 250GB SATA 80GB USB und Asus Eee PC 4G mit Ubuntu-eee-8.04.1\\
Die komplette Seite samt Begleittext in HTML packen?
Also z.B.:
So in etwa dachte ich mir das.
Ansonsten kannst du auch den schwereren Weg gehen und alles Daten selber in Pixmaps rendern, die du dann millimetergenau auf deinem Drucker platzieren kannst.
Oder du malst mit nem Painter direkt auf den Printer (QPrinter ist auch nur ein QPaintDevice, welches du einem QPainter.begin() mitgeben kannst). Ist die umständlichste Lösung, aber wohl die mit den bestmöglichen Resultaten.
Also z.B.:
Code: Alles auswählen
pg = ""
pg += "Das ist der <i>Begleittext</i>"
# usw.
row = 0
while row < table.rowCount():
pg += "<tr>"
col = 0
while col < table.columnCount():
pg += "<td>"
item = table.item(row, col)
if item:
pg += item.data(Qt.DisplayRole)
col += 1
pg += "</td>"
row += 1
pg += "</tr>"
pg += "</table"
doc = QTextDocument()
doc.setHtml(pg)
Ansonsten kannst du auch den schwereren Weg gehen und alles Daten selber in Pixmaps rendern, die du dann millimetergenau auf deinem Drucker platzieren kannst.
Oder du malst mit nem Painter direkt auf den Printer (QPrinter ist auch nur ein QPaintDevice, welches du einem QPainter.begin() mitgeben kannst). Ist die umständlichste Lösung, aber wohl die mit den bestmöglichen Resultaten.
Hier is ein kleines Beispiel, was so wenigstens die HTML Code betrifft:
Code: Alles auswählen
# PyQT's QLabel widget can display html formatted text
# used here to display data in a nice table
# tested with Python 3.1.1 and PyQT 4.5.2
# ene
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class MyForm(QWidget):
def __init__(self, html_table):
QWidget.__init__(self)
# setGeometry(x_pos, y_pos, width, height)
# widget will expand to fit lable size
self.setGeometry(100, 150, 1, 1)
self.setWindowTitle("html formatted data table")
label = QLabel(html_table)
# use the grid layout manager
grid = QGridLayout()
# addWidget(widget, row, column, rowSpan=1, columnSpan=1)
grid.addWidget(label, 0, 0)
self.setLayout(grid)
def make_html_table(data_list):
"""
use a list of data tuples and create the html code
of a html formatted table containing the data items
"""
rows = len(data_list)
columns = len(data_list[0])
# color is in hex format "#RRGGBB"
html = '<table border="5" bordercolor="#0000cc" cellspacing="5" '
html += 'cellpadding="5" width="5" bgcolor="#ffff66">\n'
for row in range(rows):
html += '<tr>\n'
for col in range(columns):
item = data_list[row][col]
html += " %s%s%s\n" % ('<td>', item, '</td>')
html += '</tr>\n'
html += '</table>\n'
return html
# a list of (name, age, weight) tuples
# the first tuple is the header
data_list = [
('Name', 'Age', 'Weight'),
('Heidi Kalumpa', '36', '127'),
('Frank Maruco', '27', '234'),
('Larry Pestraus', '19', '315'),
('Serge Romanowski', '59', '147'),
('Carolus Arm', '94', '102'),
('Michel Sargnagel', '21', '175')
]
html_table = make_html_table(data_list)
#print(html_table) # for test only
app = QApplication([])
form = MyForm(html_table)
form.show()
app.exec_()
Atomkraftwerkaktienbesitzer
- klaus66
- User
- Beiträge: 51
- Registriert: Mittwoch 11. März 2009, 09:26
- Wohnort: Bergisch Gladbach-Bensberg
Erstmal vielen Dank für Eure Hilfe und Anregungen.
Ich befinde mich noch in der Testphase mit PlainText und Formatstrings, weil alles andere nicht so geklappt hat, wie ich es mir vorstelle.
Das ist ein mühseeliges Geschäft, eine Art Erbsenzählerei!
Aber es scheint jetzt hinzuhauen und ist im Grunde vom Programm her die simpelste Lösung, wenn auch nicht die eleganteste.
Ich befinde mich noch in der Testphase mit PlainText und Formatstrings, weil alles andere nicht so geklappt hat, wie ich es mir vorstelle.
Das ist ein mühseeliges Geschäft, eine Art Erbsenzählerei!
Aber es scheint jetzt hinzuhauen und ist im Grunde vom Programm her die simpelste Lösung, wenn auch nicht die eleganteste.
Mit freundlichem Gruß Klaus
Das Geheimnis des Könnens liegt im Wollen!
Ubuntu 9.10 64Bit, AMD Athlon 64/Opteron 3200+, 1GB RAM, NVIDIA GeForce7, 250GB SATA 80GB USB und Asus Eee PC 4G mit Ubuntu-eee-8.04.1\\
Das Geheimnis des Könnens liegt im Wollen!
Ubuntu 9.10 64Bit, AMD Athlon 64/Opteron 3200+, 1GB RAM, NVIDIA GeForce7, 250GB SATA 80GB USB und Asus Eee PC 4G mit Ubuntu-eee-8.04.1\\
- microkernel
- User
- Beiträge: 271
- Registriert: Mittwoch 10. Juni 2009, 17:27
- Wohnort: Frankfurt
- Kontaktdaten:
Hallo,
hab so ein ähnliches Problem. Nur das ich schon meine Tabelle im richtigen Format habe. Ich weiß jetzt nur nicht wie man texte, tabelle und/oder ect. überhaupt drucken kann.
Kann mir da jemand helfen?
Liebe Grüße
microkernel.
hab so ein ähnliches Problem. Nur das ich schon meine Tabelle im richtigen Format habe. Ich weiß jetzt nur nicht wie man texte, tabelle und/oder ect. überhaupt drucken kann.
Kann mir da jemand helfen?
Liebe Grüße
microkernel.