Pythonda QTableWidgeti html olarak QTextDocumente aktarıyorum. Tablo aktarılıyor ama sayfayı yatay olarak doldurmuyor fakat ben tablonun yatay olarak sayfaya doldurulmasını istiyorum. HTML bilgim nerdeyse yok.
QTableWidgeti Htmle aktaran script:
html_content = """
<style>
table {
border-collapse: collapse;
}
tr, td {
border: 1px solid black; /* Kenar kalınlığı ve rengi */
padding: 5px; /* Hücre içi boşluk */
}
</style>
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">TESLIMAT BILGI FISI</span></p>
"""
html_content += f"<p>Müşteri Adı Soyadı: {self.ui.lineEdit.text()}</p>"
html_content += f"<p>Müşteri Adresi: {self.ui.lineEdit_2.text()}</p>"
html_content += f"<p>Müşteri Telefon Numarası: {self.ui.lineEdit_3.text()}</p>"
html_content += f"<p>Müşteri E-Posta Adresi: {self.ui.lineEdit_4.text()}</p>"
html_content += "<table>"
html_content += "<p></p>"
html_content += "<tr>"
html_content += "<td>SN</td>"
for column in range(table_widget.columnCount()):
header = table_widget.horizontalHeaderItem(column)
html_content += f"<td>{header.text()' '}</td>"
html_content += "<tr>"
for row in range(table_widget.rowCount()):
html_content += "<tr>"
html_content += f"<td>{row+1}</td>"
for column in range(table_widget.columnCount()):
if column != 10 and column != 11:
item = table_widget.item(row, column)
if item is not None:
html_content += f"<td>{item.text()}"+"</td>"
else:
html_content += "<td></td>"
html_content += "</tr>"
html_content += "</table>"
date = datetime.datetime.strftime(datetime.datetime.now(), "%d/%m/%Y")
html_content += "<p></p>"
html_content += f"<p align=\"right\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:8.25pt;\">{date}</span></p>"
Olmasını Istemediğim Hali:
Olmasını Istediğim Örnek Tablo:
Pek emin değilim ama şöyle olsa olmaz mı acaba;
html_content = """
<style>
table {
border-collapse: collapse;
}
tr, td {
border: 1px solid black; /* Kenar kalınlığı ve rengi */
padding: 5px; /* Hücre içi boşluk */
}
</style>
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">TESLIMAT BILGI FISI</span></p>
"""
html_content += f"<p>Müşteri Adı Soyadı: {self.ui.lineEdit.text()}</p>"
html_content += f"<p>Müşteri Adresi: {self.ui.lineEdit_2.text()}</p>"
html_content += f"<p>Müşteri Telefon Numarası: {self.ui.lineEdit_3.text()}</p>"
html_content += f"<p>Müşteri E-Posta Adresi: {self.ui.lineEdit_4.text()}</p>"
html_content += "<center><table>"
html_content += "<p></p>"
html_content += "<tr>"
html_content += "<td>SN</td>"
for column in range(table_widget.columnCount()):
header = table_widget.horizontalHeaderItem(column)
html_content += f"<td>{header.text()' '}</td>"
html_content += "</tr>"
for row in range(table_widget.rowCount()):
html_content += "<tr>"
html_content += f"<td>{row+1}</td>"
for column in range(table_widget.columnCount()):
if column != 10 and column != 11:
item = table_widget.item(row, column)
if item is not None:
html_content += f"<td>{item.text()}"+"</td>"
else:
html_content += "<td></td>"
html_content += "</tr>"
html_content += "</table></center>"
date = datetime.datetime.strftime(datetime.datetime.now(), "%d/%m/%Y")
html_content += "<p></p>"
html_content += f"<p align=\"right\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:8.25pt;\">{date}</span></p>"
bu şekilde sadece yatay olarak ortalıyor. ben yatay olarak kaplamak istiyorum.
1 Beğeni
<table>
etiketinin içine style="width:100%"
gibi birşey yazmayı denediniz mi? Mesela aşağıdaki gibi;
html_content = """
<style>
table {
border-collapse: collapse;
}
tr, td {
border: 1px solid black; /* Kenar kalınlığı ve rengi */
padding: 5px; /* Hücre içi boşluk */
}
</style>
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">TESLIMAT BILGI FISI</span></p>
"""
html_content += f"<p>Müşteri Adı Soyadı: {self.ui.lineEdit.text()}</p>"
html_content += f"<p>Müşteri Adresi: {self.ui.lineEdit_2.text()}</p>"
html_content += f"<p>Müşteri Telefon Numarası: {self.ui.lineEdit_3.text()}</p>"
html_content += f"<p>Müşteri E-Posta Adresi: {self.ui.lineEdit_4.text()}</p>"
html_content += "<table style='width:100%'>"
html_content += "<p></p>"
html_content += "<tr>"
html_content += "<td>SN</td>"
for column in range(table_widget.columnCount()):
header = table_widget.horizontalHeaderItem(column)
html_content += f"<td>{header.text()' '}</td>"
html_content += "</tr>"
for row in range(table_widget.rowCount()):
html_content += "<tr>"
html_content += f"<td>{row+1}</td>"
for column in range(table_widget.columnCount()):
if column != 10 and column != 11:
item = table_widget.item(row, column)
if item is not None:
html_content += f"<td>{item.text()}"+"</td>"
else:
html_content += "<td></td>"
html_content += "</tr>"
html_content += "</table>"
date = datetime.datetime.strftime(datetime.datetime.now(), "%d/%m/%Y")
html_content += "<p></p>"
html_content += f"<p align=\"right\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:8.25pt;\">{date}</span></p>"
Son değişiklik ile çalıştırdığınızda karşılaştığınız ekran görüntüsünü atsanız güzel olurdu aslında. Normalde çalışması lazım, bir de şöyle deneyelim. Yukarıda <style>
altında tabloya width
verip çalıştıralım.
html_content = """
<style>
table {
border-collapse: collapse;
width:100%;
}
tr, td {
border: 1px solid black; /* Kenar kalınlığı ve rengi */
padding: 5px; /* Hücre içi boşluk */
}
</style>
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">TESLIMAT BILGI FISI</span></p>
"""
html_content += f"<p>Müşteri Adı Soyadı: {self.ui.lineEdit.text()}</p>"
html_content += f"<p>Müşteri Adresi: {self.ui.lineEdit_2.text()}</p>"
html_content += f"<p>Müşteri Telefon Numarası: {self.ui.lineEdit_3.text()}</p>"
html_content += f"<p>Müşteri E-Posta Adresi: {self.ui.lineEdit_4.text()}</p>"
html_content += "<table>"
html_content += "<p></p>"
html_content += "<tr>"
html_content += "<td>SN</td>"
for column in range(table_widget.columnCount()):
header = table_widget.horizontalHeaderItem(column)
html_content += f"<td>{header.text()' '}</td>"
html_content += "</tr>"
for row in range(table_widget.rowCount()):
html_content += "<tr>"
html_content += f"<td>{row+1}</td>"
for column in range(table_widget.columnCount()):
if column != 10 and column != 11:
item = table_widget.item(row, column)
if item is not None:
html_content += f"<td>{item.text()}"+"</td>"
else:
html_content += "<td></td>"
html_content += "</tr>"
html_content += "</table>"
date = datetime.datetime.strftime(datetime.datetime.now(), "%d/%m/%Y")
html_content += "<p></p>"
html_content += f"<p align=\"right\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:8.25pt;\">{date}</span></p>"
Sonuç:
Yine yatay olarak dolmadı.
Yukarıdaki görüntüyü iki ayrı tablo olarak ya da tek bir tablonun 2. satırının dikey çizgilerini yok ederek elde edebilirsiniz. Siz elde etmek istediğiniz görüntü için aşağıdaki gibi <table>
etiketinden sonra <p></p>
ile boşluk bırakmaya çalışmışsınız galiba. Bu bana pek mantıklı gelmedi.
Aşağıdaki satır da bana hatalı gibi geliyor, PyQt kullanmadığım için emin değilim;
sanki burası html_content += f"<td>{header.text()+' '}</td>"
olmalı gibi. (+ ile string birleştirme yapılmalı gibi geldi.)
PyQt kullanmadan, sadece html mantığı ile baktığımda aşağıdaki kodların normalde istediğin görüntüyü sağlaması lazım.
html_content = """
<style>
table {
border-collapse: collapse;
width:100%;
}
td {
border: 1px solid black; /* Kenar kalınlığı ve rengi */
padding: 5px; /* Hücre içi boşluk */
}
</style>
<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">TESLIMAT BILGI FISI</span></p>
"""
html_content += f"<p>Müşteri Adı Soyadı: {self.ui.lineEdit.text()}</p>"
html_content += f"<p>Müşteri Adresi: {self.ui.lineEdit_2.text()}</p>"
html_content += f"<p>Müşteri Telefon Numarası: {self.ui.lineEdit_3.text()}</p>"
html_content += f"<p>Müşteri E-Posta Adresi: {self.ui.lineEdit_4.text()}</p><br/>"
html_content += "<table>"
html_content += "<tr>"
html_content += "<td>SN</td>"
for column in range(table_widget.columnCount()):
header = table_widget.horizontalHeaderItem(column)
html_content += f"<td>{header.text()' '}</td>"
html_content += "</tr></table><br/><br/><table>"
for row in range(table_widget.rowCount()):
html_content += "<tr>"
html_content += f"<td>{row+1}</td>"
for column in range(table_widget.columnCount()):
if column != 10 and column != 11:
item = table_widget.item(row, column)
if item is not None:
html_content += f"<td>{item.text()}"+"</td>"
else:
html_content += "<td></td>"
html_content += "</tr>"
html_content += "</table>"
date = datetime.datetime.strftime(datetime.datetime.now(), "%d/%m/%Y")
html_content += "<p></p>"
html_content += f"<p align=\"right\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:8.25pt;\">{date}</span></p>"