#python #pyqt5 #qprinter #qdatetime
#python #pyqt5 #qprinter #qdatetime
Вопрос:
Есть ли способ преобразовать в формат даты, который будет использовать принтер и QTextDocument, чтобы результат всегда отображался в дате и времени, как на изображении?
это мой код
def handlePaintRequest(self, printer):
model_hjd = QSqlTableModel()
model_hjd.setTable('transactions')
date = str(self.dateEdit_10.text())
date_2 = str(self.dateEdit_14.text())
self.tableView_22.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
model_hjd.setSort(6, Qt.DescendingOrder)
self.tableView_22.setModel(model_hjd)
model_hjd.select()
filter_ft = "date_d BETWEEN '%s' AND '%s'" % (date, date_2)
model_hjd.setFilter(filter_ft)
self.tableView_22.setModel(model_hjd)
document = QTextDocument()
cursor = QTextCursor(document)
tableFormat = QTextTableFormat()
table = cursor.insertTable(model_hjd.rowCount() 1, model_hjd.columnCount(), tableFormat)
myheaders = []
for i in range(0, model_hjd.columnCount()):
myheader = model_hjd.headerData(i, Qt.Horizontal)
cursor.insertText(myheader)
cursor.movePosition(QTextCursor.NextCell)
for row in range(0, model_hjd.rowCount()):
for col in range(0, model_hjd.columnCount()):
index = model_hjd.index( row, col )
cursor.insertText(str(index.data()))
cursor.movePosition(QTextCursor.NextCell)
document.print_(printer)
но результат в дате и времени выглядит следующим образом
Комментарии:
1. Вы пытались использовать PyQt5, импортируя и конвертируя его?
2. время и дата в базе данных в порядке и в формате даты и времени, но когда я пытаюсь напечатать результат, подобный изображению ( pyqt5.qtcore.qdate (2020,8,8)), я хочу напечатать только дату и время
3. zetcode.com/gui/pyqt5/datetime попробуйте это
4. спасибо, Биджинабрахам, но @Heike решил это
Ответ №1:
Вы могли бы использовать пользовательскую функцию для форматирования различных типов данных в вашей таблице, например
@staticmethod
def to_string(entry):
if isinstance(entry, (QtCore.QDate, QtCore.QTime, QtCore.QDateTime)):
return entry.toString(Qt.SystemLocaleShortDate)
else:
return str(entry)
def handlePaintRequest(self, printer):
....
cursor.insertText(self.to_string(index.data()))
....
Комментарии:
1. изменить
if any(isinstance(entry, tt) for tt in (QtCore.QDate, QtCore.QTime, QtCore.QDateTime)):
наif isinstance(entry, (QtCore.QDate, QtCore.QTime, QtCore.QDateTime)):
2. Спасибо @eyllansec. Я не знал, что isinstance может обрабатывать коллекции типов.