def paint(self, painter, option, index): QStyledItemDelegate.paint(self, painter, option, index) text, positions = index.data(Qt.UserRole) self.initStyleOption(option, index) painter.save() painter.setFont(option.font) p = option.palette c = p.HighlightedText if option.state & QStyle.State_Selected else p.Text group = (p.Active if option.state & QStyle.State_Active else p.Inactive) c = p.color(group, c) painter.setClipRect(option.rect) if positions is None or -1 in positions: painter.setPen(c) painter.drawText(option.rect, Qt.AlignLeft | Qt.AlignVCenter | Qt.TextSingleLine, text) else: to = QTextOption() to.setWrapMode(to.NoWrap) to.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) positions = sorted(set(positions) - {-1}, reverse=True) text = '<body>%s</body>' % make_highlighted_text(Results.EMPH, text, positions) doc = QTextDocument() c = 'rgb(%d, %d, %d)'%c.getRgb()[:3] doc.setDefaultStyleSheet(' body { color: %s }'%c) doc.setHtml(text) doc.setDefaultFont(option.font) doc.setDocumentMargin(0.0) doc.setDefaultTextOption(to) height = doc.size().height() painter.translate(option.rect.left(), option.rect.top() + (max(0, option.rect.height() - height) // 2)) doc.drawContents(painter) painter.restore()
def profile(): import sys from PyQt5.Qt import QTextDocument from calibre.gui2 import Application from calibre.gui2.tweak_book import set_book_locale from calibre.gui2.tweak_book.editor.themes import get_theme app = Application([]) set_book_locale('en') with open(sys.argv[-2], 'rb') as f: raw = f.read().decode('utf-8') doc = QTextDocument() doc.setPlainText(raw) h = Highlighter() theme = get_theme(tprefs['editor_theme']) h.apply_theme(theme) h.set_document(doc) h.join() import cProfile print('Running profile on', sys.argv[-2]) h.rehighlight() cProfile.runctx('h.join()', {}, {'h': h}, sys.argv[-1]) print('Stats saved to:', sys.argv[-1]) del h del doc del app
def createDocument(self, rootFrame): # Create empty document self.document = QTextDocument() self.document.setUndoRedoEnabled(False) self.document.setIndentWidth(20) # Register a renderer for custom text objects mo = CustomObjectRenderer() mo.setParent(self.document) self.document.documentLayout().registerHandler(QTextCharFormat.UserObject+1, mo); self.cursor = QTextCursor(self.document) self.listLevel = 0 self.paraFormat = None # add all root paragraphs for n in rootFrame.children: self.addNode(n) # Clean up the first paragraph if document is not empty self.cursor.movePosition(QTextCursor.Start) b = self.cursor.block() if b.length() == 1: cursor = QTextCursor(self.document.findBlockByLineNumber(0)) cursor.select(QTextCursor.BlockUnderCursor) cursor.deleteChar() return self.document
def to_doc(self, index): data = index.data(Qt.ItemDataRole.UserRole) if data is None: html = _('<b>This shortcut no longer exists</b>') elif data.is_shortcut: shortcut = data.data # Shortcut keys = [ unicode_type(k.toString( QKeySequence.SequenceFormat.NativeText)) for k in shortcut['keys'] ] if not keys: keys = _('None') else: keys = ', '.join(keys) html = '<b>%s</b><br>%s: %s' % (prepare_string_for_xml( shortcut['name']), _('Shortcuts'), prepare_string_for_xml(keys)) else: # Group html = data.data doc = QTextDocument() doc.setHtml(html) return doc
def build_query_text_edit(self): # Add layouts query_edit_layout = QVBoxLayout(self) query_edit_layout.setContentsMargins(0, 0, 0, 0) query_control_layout = QHBoxLayout(self) query_control_layout.setContentsMargins(0, 0, 0, 0) # Execute query button self.query_execute_button = QPushButton( UI.QUERY_CONTROL_EXECUTE_BUTTON_TEXT, self) self.query_execute_button.clicked.connect(self.on_execute_click) query_control_layout.addWidget(self.query_execute_button) # Fetch data button self.query_fetch_button = QPushButton( UI.QUERY_CONTROL_FETCH_BUTTON_TEXT, self) self.query_fetch_button.clicked.connect(self.on_fetch_click) self.model.fetch_changed.connect(self.on_fetch_changed) query_control_layout.addWidget(self.query_fetch_button) # Commit button self.query_commit_button = QPushButton( UI.QUERY_CONTROL_COMMIT_BUTTON_TEXT, self) self.query_commit_button.clicked.connect(self.on_connect_click) query_control_layout.addWidget(self.query_commit_button) # Rollback button self.query_rollback_button = QPushButton( UI.QUERY_CONTROL_ROLLBACK_BUTTON_TEXT, self) self.query_rollback_button.clicked.connect(self.on_rollback_click) query_control_layout.addWidget(self.query_rollback_button) # Build control strip widget query_control = QWidget(self) query_control.setLayout(query_control_layout) query_edit_layout.addWidget(query_control) # Initialize query edit document for text editor # and use SQL Highlighter CSS styles for it. self.query_text_edit_document = QTextDocument(self) self.query_text_edit_document.setDefaultStyleSheet( SQLHighlighter.style()) # Initialize query text editor using previously built # text edutir document. self.query_text_edit = QTextEdit(self) self.query_text_edit.setDocument(self.query_text_edit_document) self.query_text_edit.textChanged.connect(self.on_query_changed) self.query_text_edit.setText(UI.QUERY_EDITOR_DEFAULT_TEXT) query_edit_layout.addWidget(self.query_text_edit) # Connect model's connected/disconnected signals self.model.connected.connect(self.on_connected) self.model.disconnected.connect(self.on_disconnected) query_edit = QWidget(self) query_edit.setLayout(query_edit_layout) query_edit.sizePolicy().setVerticalPolicy(QSizePolicy.Minimum) return query_edit
def __init__(self, config): super(Doc, self).__init__() self._text = QTextDocument() self._cfg = config self._text_edit_cursor = QTextCursor(self._text) self._text.setIndentWidth(self._cfg.get("TextEditor/IndentWidth", 24)) self.set_default_font()
def copy_to_clipboard(self, *args): d = QTextDocument() d.setHtml(self.msg_label.text()) QApplication.clipboard().setText( u'calibre, version %s (%s, isfrozen: %s)\n%s: %s\n\n%s' % (__version__, sys.platform, isfrozen, unicode(self.windowTitle()), unicode(d.toPlainText()), unicode(self.det_msg.toPlainText()))) if hasattr(self, 'ctc_button'): self.ctc_button.setText(_('Copied'))
def render_and_save(self): path = self._get_report_path() document = QTextDocument() document.setHtml(self.render()) QTextDocumentWriter(path).write(document) self.client.save() report = db.Report(path=path, client_id=self.client.id) report.save() return report
def to_doc(self, index, option=None): doc = QTextDocument() if option is not None and option.state & QStyle.State_Selected: p = option.palette group = (p.Active if option.state & QStyle.State_Active else p.Inactive) c = p.color(group, p.HighlightedText) c = 'rgb(%d, %d, %d)' % c.getRgb()[:3] doc.setDefaultStyleSheet(' * { color: %s }' % c) doc.setHtml(index.data() or '') return doc
def generatePDF(self, contenido): hoy = str(datetime.datetime.now().year) + str( datetime.datetime.now().month) + str( datetime.datetime.now().day) + str( datetime.datetime.now().hour) + str( datetime.datetime.now().minute) + str( datetime.datetime.now().second) nombrePdf = '../archivos/' + str(hoy + 'LIST') + '.pdf' fecha = str(datetime.datetime.now()) html = """ <table width="600"> <tr width="600" color="#000000"> <td width="80%"> </td> <td width="20%" align="right"> <IMG SRC="kde1.png"> </td> </tr> </table> <hr> <br> <p> SALDOS </p> <br> """ + contenido doc = QTextDocument() doc.setHtml(html) printer = QPrinter() printer.setOutputFileName(nombrePdf) printer.setOutputFormat(QPrinter.PdfFormat) doc.print(printer) printer.newPage() url = QUrl url = QUrl(nombrePdf) QDesktopServices.openUrl(url)
def to_doc(self, index): data = index.data(Qt.UserRole) if data is None: html = _('<b>This shortcut no longer exists</b>') elif data.is_shortcut: shortcut = data.data # Shortcut keys = [unicode(k.toString(k.NativeText)) for k in shortcut['keys']] if not keys: keys = _('None') else: keys = ', '.join(keys) html = '<b>%s</b><br>%s: %s'%(shortcut['name'], _('Shortcuts'), keys) else: # Group html = '<h3>%s</h3>'%data.data doc = QTextDocument() doc.setHtml(html) return doc
def createRecibo(self, subNom, idRecibo, total, totDeuda, totPago): hoy = str(datetime.datetime.now().year) + str( datetime.datetime.now().month) + str( datetime.datetime.now().day) + str( datetime.datetime.now().hour) + str( datetime.datetime.now().minute) + str( datetime.datetime.now().second) nombrePdf = '../archivos/' + str(hoy + subNom) + '.pdf' listTransaccionTable = "" nombre = "" apellido = "" if (self.state == "COBRANZA"): nombre = self.cliente.getNombre() apellido = self.cliente.getApellido() elif (self.state == "PAGO"): nombre = self.proveedor.getNombre() apellido = self.proveedor.getDescripcion() totalDeuda = float(totDeuda) deudaString = "$ " + "{0:.2f}".format(totalDeuda) totalPago = float(totPago) pagoString = "$ +" + "{0:.2f}".format(totalPago) total = float(totalDeuda + totalPago) totalString = "{0:.2f}".format(total) fecha = str(datetime.datetime.now()) html = """ <table width="600"> <tr width="600" color="#000000"> <td width="80%"> Perfumeria La que vende perfumes <br> LABOULAYE, CORDOBA, ARGENTINA <br> TEL: 0351-111111 <br> MAIL: [email protected] <br> </td> <td width="20%" align="right"> <IMG SRC="kde1.png"> </td> </tr> </table> _______________________________________________________________________________________________________ <p> DATOS DEL CLIENTE: </p> <br> <table> <tr> <td> NOMBRE: """ + nombre + """ <br> APELLIDO: """ + apellido + """ <br> </td> <td> </td> </tr> </table> <br> _______________________________________________________________________________________________________ <br> <p> DETALLES DEL RECIBO: </p> <br> <table width="600" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> <tr style=" background-color: gray; border-style: inset;"> <td width="80%" align="center" valign="middle"> <b> DESCRIPCION </b> </td> <td width="20%" align="center" valign="middle"> <b> MONTO </b> </td> </tr> </table> <br> <br> <br> <br> <table height="350" width="600" style="border-color: gray; border-width: .4px; border-collapse: collapse;"> <tr height="80"> <td width="80%" align="left" > <br>DEUDA <br> </td> <td width="20%" > <br> """ + str( deudaString) + """<br> </td> </tr> <tr height="80"> <td width="80%" align="left" > <br> PAGO<br> </td> <td width="20%" > <br> """ + str( pagoString) + """<br> </td> </tr> </table> <br> <br> <table width="600" border="0.5" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> <tr > <td width="90%" align="right"> <br> TOTAL.................................................................................................................. <br> </td> <td width="10%" align="center"> <br> $ """ + str(totalString) + """<br> </td> </tr> </table> <br> <br> <br> <br> <br> <br> <p width="600" align="center" style=" font-size: 10; " > Por cualquier consulta, sobre este recibo, dirigirse al local que se encuentra ubicado en la calle independencia 450. <br> O Comunicarse a los telefonos 03382-123123123 / 4231231 </p> <br> <br> <br> <br> <br> _______________________________________________________________________________________________________ <br> <table width="600"> <tr> <td align="right" width="80%"> FECHA/HORA : """ + fecha + """ </td> <td align="right"> N° : """ + str(idRecibo) + """ </td> </tr> </table> _______________________________________________________________________________________________________ """ doc = QTextDocument() doc.setHtml(html) printer = QPrinter() printer.setOutputFileName(nombrePdf) printer.setOutputFormat(QPrinter.PdfFormat) doc.print(printer) printer.newPage() url = QUrl url = QUrl(nombrePdf) QDesktopServices.openUrl(url)
def to_doc(self, index): doc = QTextDocument() doc.setHtml(index.data()) return doc
def generateList(self): hoy = str(datetime.datetime.now().year) + str( datetime.datetime.now().month) + str( datetime.datetime.now().day) + str( datetime.datetime.now().hour) + str( datetime.datetime.now().minute) + str( datetime.datetime.now().second) nombrePdf = '../archivos/' + str(hoy + 'LIST') + '.pdf' listTable = "" for lista in self.listProducto: listTable += """ <tr height="80"> <td width="60%" align="left" > <br>""" + str(lista[1]) + """<br> </td> <td width="20%" align="center"> <br> """ + str( lista[3]) + """<br> </td> <td width="20%" align="center"> <br> """ + str( lista[2]) + """<br> </td> </tr> """ fecha = str(datetime.datetime.now()) html = """ <table width="600"> <tr width="600" color="#000000"> <td width="80%"> </td> <td width="20%" align="right"> <IMG SRC="kde1.png"> </td> </tr> </table> <hr> <br> <p> LISTADO DE PRODUCTOS SIN STOCK : </p> <br> <table width="600" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> <tr style=" background-color: gray; border-style: inset;"> <td width="60%" align="center" valign="middle"> <b> PRODUCTOS </b> </td> <td width="20%" align="center" valign="middle"> <b> CANTIDAD MINIMA </b> </td> <td width="20%" align="center" valign="middle"> <b> CANTIDAD </b> </td> </tr> </table> <br> <br> <table width="600" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> """ + listTable + """ </table> <br> <br> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <br> <hr> <br> <table width="600"> <tr> <td align="right" width="100%"> FECHA/HORA : """ + fecha + """ </td> </tr> </table> <hr> """ doc = QTextDocument() doc.setHtml(html) printer = QPrinter() printer.setOutputFileName(nombrePdf) printer.setOutputFormat(QPrinter.PdfFormat) doc.print(printer) printer.newPage() url = QUrl url = QUrl(nombrePdf) QDesktopServices.openUrl(url)
def generarRecibo(self, listDetail, subName, id, header): """ @param listDetail: lista de detalles @param subName: Sub-nombre para generar el PDF @param id: Id del recibo """ self.nombrePdf = '../archivos/' + str(self.hoy + subName) + '.pdf' listDetalHtml = self.generateTableTransaction(listDetail, header) nombre = "" apellido = "" if (self.tipoTransaccion == "VENTA"): nombre = self.cliente.getNombre() apellido = self.cliente.getApellido() elif (self.tipoTransaccion == "COMPRA"): nombre = self.proveedor.getNombre() apellido = self.proveedor.getDescripcion() total = self.winPrincipal.lblTotal.text() fecha = str(datetime.datetime.now()) html = """ <table width="600"> <tr width="600" color="#000000"> <td width="80%"> Perfumeria La que vende perfumes <br> LABOULAYE, CORDOBA, ARGENTINA <br> TEL: 0351-111111 <br> MAIL: [email protected] <br> </td> <td width="20%" align="right"> <IMG SRC="kde1.png"> </td> </tr> </table> _______________________________________________________________________________________________________ <p> DATOS DEL CLIENTE: </p> <br> <table> <tr> <td> NOMBRE: """ + nombre + """ <br> APELLIDO: """ + apellido + """ <br> </td> <td> </td> </tr> </table> <br> _______________________________________________________________________________________________________ <br> <p> DETALLES DE LA COMPRA: </p> <br> <table width="600" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> <tr style=" background-color: gray; border-style: inset;"> <td width="10%" align="center" valign="middle"> <b> CANT </b> </td> <td width="20%" align="center" valign="middle"> <b> PRODUCTO </b> </td> <td width="50%" align="center" valign="middle"> <b> DESCRIPCION </b> </td> <td width="10%" align="center" valign="middle"> <b> PREC <br>UNIT </b> </td> <td width="10%" align="center" valign="middle"> <b> PREC <br>TOT </b> </td> </tr> </table> <br> <br> <br> <br> <table height="350" width="600" style="border-color: gray; border-width: .4px; border-collapse: collapse;"> """ + listTransaccionTable + """ </table> <br> <br> <table width="600" border="0.5" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> <tr > <td width="90%" align="right"> <br> TOTAL.................................................................................................................. <br> </td> <td width="10%" align="center"> <br> $ """ + total + """<br> </td> </tr> </table> <br> <br> <br> <p width="600" align="center" style=" font-size: 10; " > Por cualquier consulta, sobre este recibo, dirigirse al local que se encuentra ubicado en la calle independencia 450. <br> O Comunicarse a los telefonos 03382-123123123 / 4231231 </p> <br> <br> <br> <br> <br> _______________________________________________________________________________________________________ <br> <table width="600"> <tr> <td align="right" width="80%"> FECHA/HORA : """ + fecha + """ </td> <td align="right"> N° : """ + str(idRecibo) + """ </td> </tr> </table> _______________________________________________________________________________________________________ """ doc = QTextDocument() doc.setHtml(html) #doc.setDefaultStyleSheet(style) printer = QPrinter() printer.setOutputFileName(nombrePdf) printer.setOutputFormat(QPrinter.PdfFormat) doc.print(printer) printer.newPage() url = QUrl url = QUrl(nombrePdf) QDesktopServices.openUrl(url)
def createList(self): hoy = str(datetime.datetime.now().year) + str(datetime.datetime.now().month) + str(datetime.datetime.now().day) + str(datetime.datetime.now().hour) + str(datetime.datetime.now().minute) + str(datetime.datetime.now().second) nombrePdf = '../archivos/' + str(hoy + 'LIST') + '.pdf' listTable = "" for lista in self.listFinal: listTable += """ <tr height="80"> <td width="40%" align="center" > <br>""" + str(lista[0]) + """<br> </td> <td width="40%" > <br> """ + str(lista[1]) + """<br> </td> <td width="20%" > <br> """ + str(lista[2]) + """<br> </td> </tr> """ subtitle = "Listado de clientes con deudas : " if self.type == 'PROV': subtitle = "Listado de deudas a proveedores : " fecha = str(datetime.datetime.now()) html = """ <table width="600"> <tr width="600" color="#000000"> <td width="80%"> </td> <td width="20%" align="right"> <IMG SRC="kde1.png"> </td> </tr> </table> <hr> <br> <p> """+ subtitle + """ </p> <br> <table width="600" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> <tr style=" background-color: gray; border-style: inset;"> <td width="40%" align="center" valign="middle"> <b> APELLIDO </b> </td> <td width="40%" align="center" valign="middle"> <b> NOMBRE </b> </td> <td width="20%" align="center" valign="middle"> <b> DEUDA </b> </td> </tr> </table> <br> <br> <table width="600" height="0" style="border-color: black; border-width: 0.5px; border-spacing: 0;"> """ + listTable + """ </table> <br> <br> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <br> <hr> <br> <table width="600"> <tr> <td align="right" width="100%"> FECHA/HORA : """+ fecha + """ </td> </tr> </table> <hr> """ doc = QTextDocument() doc.setHtml(html) printer = QPrinter() printer.setOutputFileName(nombrePdf) printer.setOutputFormat(QPrinter.PdfFormat) doc.print(printer) printer.newPage() url = QUrl url = QUrl(nombrePdf) QDesktopServices.openUrl(url)
def __init__(self, parent): QStyledItemDelegate.__init__(self, parent) self.document = QTextDocument()