真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在python3中使用PyQt5實現(xiàn)一個文檔打印功能-創(chuàng)新互聯(lián)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)怎么在python3中使用PyQt5實現(xiàn)一個文檔打印功能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

成都創(chuàng)新互聯(lián)專注于臺安企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站建設(shè)。臺安網(wǎng)站建設(shè)公司,為臺安等地區(qū)提供建站服務(wù)。全流程按需規(guī)劃網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

python的數(shù)據(jù)類型有哪些?

python的數(shù)據(jù)類型:1. 數(shù)字類型,包括int(整型)、long(長整型)和float(浮點型)。2.字符串,分別是str類型和unicode類型。3.布爾型,Python布爾類型也是用于邏輯運算,有兩個值:True(真)和False(假)。4.列表,列表是Python中使用最頻繁的數(shù)據(jù)類型,集合中可以放任何數(shù)據(jù)類型。5. 元組,元組用”()”標識,內(nèi)部元素用逗號隔開。6. 字典,字典是一種鍵值對的集合。7. 集合,集合是一個無序的、不重復(fù)的數(shù)據(jù)組合。

1、使用HTML和QTextDOcument打印文檔 

2、使用QTextCusor和QTextDocument打印文檔
3、使用QPainter打印文檔

使用Qpainter打印文檔比QTextDocument需要更操心和復(fù)雜的計算,但是QPainter確實能夠?qū)敵鲑x予完全控制。

#!/usr/bin/env python3
import math
import sys
import html
from PyQt5.QtPrintSupport import QPrinter,QPrintDialog
from PyQt5.QtCore import (QDate, QRectF, Qt)
from PyQt5.QtWidgets import (QApplication,QDialog, 
 QHBoxLayout,QPushButton, QTableWidget, QTableWidgetItem,QVBoxLayout)
from PyQt5.QtGui import (QFont,QFontMetrics,QPainter,QTextCharFormat,
  QTextCursor, QTextDocument, QTextFormat,
  QTextOption, QTextTableFormat,
  QPixmap,QTextBlockFormat)
import qrc_resources


from PyQt5.QtPrintSupport import QPrinter,QPrintDialog
from PyQt5.QtCore import (QDate, QRectF, Qt)
from PyQt5.QtWidgets import (QApplication,QDialog, 
 QHBoxLayout,QPushButton, QTableWidget, QTableWidgetItem,QVBoxLayout)
from PyQt5.QtGui import (QFont,QFontMetrics,QPainter,QTextCharFormat,
  QTextCursor, QTextDocument, QTextFormat,
  QTextOption, QTextTableFormat,
  QPixmap,QTextBlockFormat)
import qrc_resources
DATE_FORMAT = "MMM d, yyyy"


class Statement(object):

 def __init__(self, company, contact, address):
 self.company = company
 self.contact = contact
 self.address = address
 self.transactions = [] # List of (QDate, float) two-tuples


 def balance(self):
 return sum([amount for date, amount in self.transactions])


class Form(QDialog):

 def __init__(self, parent=None):
 super(Form, self).__init__(parent)

 self.printer = QPrinter()
 self.printer.setPageSize(QPrinter.Letter)
 self.generateFakeStatements()
 self.table = QTableWidget()
 self.populateTable()

 cursorButton = QPushButton("Print via Q&Cursor")
 htmlButton = QPushButton("Print via &HTML")
 painterButton = QPushButton("Print via Q&Painter")
 quitButton = QPushButton("&Quit")

 buttonLayout = QHBoxLayout()
 buttonLayout.addWidget(cursorButton)
 buttonLayout.addWidget(htmlButton)
 buttonLayout.addWidget(painterButton)
 buttonLayout.addStretch()
 buttonLayout.addWidget(quitButton)
 layout = QVBoxLayout()
 layout.addWidget(self.table)
 layout.addLayout(buttonLayout)
 self.setLayout(layout)

 cursorButton.clicked.connect(self.printViaQCursor)
 htmlButton.clicked.connect(self.printViaHtml)
 painterButton.clicked.connect(self.printViaQPainter)
 quitButton.clicked.connect(self.accept)

 self.setWindowTitle("Printing")


 def generateFakeStatements(self):
 self.statements = []
 statement = Statement("Consality", "Ms S. Royal",
 "234 Rue Saint Hyacinthe, 750201, Paris")
 statement.transactions.append((QDate(2007, 8, 11), 2342))
 statement.transactions.append((QDate(2007, 9, 10), 2342))
 statement.transactions.append((QDate(2007, 10, 9), 2352))
 statement.transactions.append((QDate(2007, 10, 17), -1500))
 statement.transactions.append((QDate(2007, 11, 12), 2352))
 statement.transactions.append((QDate(2007, 12, 10), 2352))
 statement.transactions.append((QDate(2007, 12, 20), -7500))
 statement.transactions.append((QDate(2007, 12, 20), 250))
 statement.transactions.append((QDate(2008, 1, 10), 2362))
 self.statements.append(statement)

 statement = Statement("Demamitur Plc", "Mr G. Brown",
 "14 Tall Towers, Tower Hamlets, London, WC1 3BX")
 statement.transactions.append((QDate(2007, 5, 21), 871))
 statement.transactions.append((QDate(2007, 6, 20), 542))
 statement.transactions.append((QDate(2007, 7, 20), 1123))
 statement.transactions.append((QDate(2007, 7, 20), -1928))
 statement.transactions.append((QDate(2007, 8, 13), -214))
 statement.transactions.append((QDate(2007, 9, 15), -3924))
 statement.transactions.append((QDate(2007, 9, 15), 2712))
 statement.transactions.append((QDate(2007, 9, 15), -273))
 #statement.transactions.append((QDate(2007, 11, 8), -728))
 #statement.transactions.append((QDate(2008, 2, 7), 228))
 #statement.transactions.append((QDate(2008, 3, 13), -508))
 #statement.transactions.append((QDate(2008, 3, 22), -2481))
 #statement.transactions.append((QDate(2008, 4, 5), 195))
 self.statements.append(statement)


 def populateTable(self):
 headers = ["Company", "Contact", "Address", "Balance"]
 self.table.setColumnCount(len(headers))
 self.table.setHorizontalHeaderLabels(headers)
 self.table.setRowCount(len(self.statements))
 for row, statement in enumerate(self.statements):
 self.table.setItem(row, 0, QTableWidgetItem(statement.company))
 self.table.setItem(row, 1, QTableWidgetItem(statement.contact))
 self.table.setItem(row, 2, QTableWidgetItem(statement.address))
 item = QTableWidgetItem("$ {0:,.2f}".format(float(statement.balance())))
 item.setTextAlignment(Qt.AlignRight|Qt.AlignVCenter)
 self.table.setItem(row, 3, item)
 self.table.resizeColumnsToContents()


 def printViaHtml(self):
 htmltext = ""
 for statement in self.statements:
 date = QDate.currentDate().toString(DATE_FORMAT)
 address = html.escape(statement.address).replace(
  ",", "
")  contact = html.escape(statement.contact)  balance = statement.balance()  htmltext += ("

"   "Greasy Hands Ltd."   "
New Lombard Street"   "
London
WC13 4PX
{0}

"   "

{1}

Dear {2},

"   "

The balance of your account is $ {3:,.2f}.").format(   date, address, contact, float(balance))  if balance < 0:  htmltext += (" 

Please remit the "   "amount owing immediately.")  else:  htmltext += (" We are delighted to have done business "   "with you.")  htmltext += ("

 

"   ""   "Transactions")  for date, amount in statement.transactions:  color, status = "black", "Credit"  if amount < 0:   color, status = "red", "Debit"  htmltext += ("{0}"   "{1}"   "$ {3:,.2f}".format(   date.toString(DATE_FORMAT), status, color,float(abs(amount))))  htmltext += ("

"   "We hope to continue doing "   "business with you,
Yours sincerely,"   "

K. Longrey, Manager

")  dialog = QPrintDialog(self.printer, self)  if dialog.exec_():  document = QTextDocument()  document.setHtml(htmltext)  document.print_(self.printer)  def printViaQCursor(self):  dialog = QPrintDialog(self.printer, self)  if not dialog.exec_():  return  logo = QPixmap(":/logo.png")  headFormat = QTextBlockFormat()  headFormat.setAlignment(Qt.AlignLeft)  headFormat.setTextIndent(  self.printer.pageRect().width() - logo.width() - 216)  bodyFormat = QTextBlockFormat()  bodyFormat.setAlignment(Qt.AlignJustify)  lastParaBodyFormat = QTextBlockFormat(bodyFormat)  lastParaBodyFormat.setPageBreakPolicy(  QTextFormat.PageBreak_AlwaysAfter)  rightBodyFormat = QTextBlockFormat()  rightBodyFormat.setAlignment(Qt.AlignRight)  headCharFormat = QTextCharFormat()  headCharFormat.setFont(QFont("Helvetica", 10))  bodyCharFormat = QTextCharFormat()  bodyCharFormat.setFont(QFont("Times", 11))  redBodyCharFormat = QTextCharFormat(bodyCharFormat)  redBodyCharFormat.setForeground(Qt.red)  tableFormat = QTextTableFormat()  tableFormat.setBorder(1)  tableFormat.setCellPadding(2)  document = QTextDocument()  cursor = QTextCursor(document)  mainFrame = cursor.currentFrame()  page = 1  for statement in self.statements:  cursor.insertBlock(headFormat, headCharFormat)  cursor.insertImage(":/logo.png")  for text in ("Greasy Hands Ltd.", "New Lombard Street",   "London", "WC13 4PX",   QDate.currentDate().toString(DATE_FORMAT)):  cursor.insertBlock(headFormat, headCharFormat)  cursor.insertText(text)  for line in statement.address.split(", "):  cursor.insertBlock(bodyFormat, bodyCharFormat)  cursor.insertText(line)  cursor.insertBlock(bodyFormat)  cursor.insertBlock(bodyFormat, bodyCharFormat)  cursor.insertText("Dear {0},".format(statement.contact))  cursor.insertBlock(bodyFormat)  cursor.insertBlock(bodyFormat, bodyCharFormat)  balance = statement.balance()  cursor.insertText("The balance of your account is $ {0:,.2f}.".format(float(balance)))  if balance < 0:  cursor.insertBlock(bodyFormat, redBodyCharFormat)  cursor.insertText("Please remit the amount owing "    "immediately.")  else:  cursor.insertBlock(bodyFormat, bodyCharFormat)  cursor.insertText("We are delighted to have done "    "business with you.")  cursor.insertBlock(bodyFormat, bodyCharFormat)  cursor.insertText("Transactions:")  table = cursor.insertTable(len(statement.transactions), 3,    tableFormat)  row = 0  for date, amount in statement.transactions:  cellCursor = table.cellAt(row, 0).firstCursorPosition()  cellCursor.setBlockFormat(rightBodyFormat)  cellCursor.insertText(date.toString(DATE_FORMAT),    bodyCharFormat)  cellCursor = table.cellAt(row, 1).firstCursorPosition()  if amount > 0:   cellCursor.insertText("Credit", bodyCharFormat)  else:   cellCursor.insertText("Debit", bodyCharFormat)  cellCursor = table.cellAt(row, 2).firstCursorPosition()  cellCursor.setBlockFormat(rightBodyFormat)  format = bodyCharFormat  if amount < 0:   format = redBodyCharFormat  cellCursor.insertText("$ {0:,.2f}".format(float(amount)), format)  row += 1  cursor.setPosition(mainFrame.lastPosition())  cursor.insertBlock(bodyFormat, bodyCharFormat)  cursor.insertText("We hope to continue doing business "   "with you,")  cursor.insertBlock(bodyFormat, bodyCharFormat)  cursor.insertText("Yours sincerely")  cursor.insertBlock(bodyFormat)  if page == len(self.statements):  cursor.insertBlock(bodyFormat, bodyCharFormat)  else:  cursor.insertBlock(lastParaBodyFormat, bodyCharFormat)  cursor.insertText("K. Longrey, Manager")  page += 1  document.print_(self.printer)  def printViaQPainter(self):  dialog = QPrintDialog(self.printer, self)  if not dialog.exec_():  return  LeftMargin = 72  sansFont = QFont("Helvetica", 10)  sansLineHeight = QFontMetrics(sansFont).height()  serifFont = QFont("Times", 11)  fm = QFontMetrics(serifFont)  DateWidth = fm.width(" September 99, 2999 ")  CreditWidth = fm.width(" Credit ")  AmountWidth = fm.width(" W999999.99 ")  serifLineHeight = fm.height()  logo = QPixmap(":/logo.png")  painter = QPainter(self.printer)  pageRect = self.printer.pageRect()  page = 1  for statement in self.statements:  painter.save()  y = 0  x = pageRect.width() - logo.width() - LeftMargin  painter.drawPixmap(x, 0, logo)  y += logo.height() + sansLineHeight  painter.setFont(sansFont)  painter.drawText(x, y, "Greasy Hands Ltd.")  y += sansLineHeight  painter.drawText(x, y, "New Lombard Street")  y += sansLineHeight  painter.drawText(x, y, "London")  y += sansLineHeight  painter.drawText(x, y, "WC13 4PX")  y += sansLineHeight  painter.drawText(x, y,   QDate.currentDate().toString(DATE_FORMAT))  y += sansLineHeight  painter.setFont(serifFont)  x = LeftMargin  for line in statement.address.split(", "):  painter.drawText(x, y, line)  y += serifLineHeight  y += serifLineHeight  painter.drawText(x, y, "Dear {0},".format(statement.contact))  y += serifLineHeight  balance = statement.balance()  painter.drawText(x, y, "The balance of your account is $ {0:,.2f}".format(float(balance)))  y += serifLineHeight  if balance < 0:  painter.setPen(Qt.red)  text = "Please remit the amount owing immediately."  else:  text = ("We are delighted to have done business "   "with you.")  painter.drawText(x, y, text)  painter.setPen(Qt.black)  y += int(serifLineHeight * 1.5)  painter.drawText(x, y, "Transactions:")  y += serifLineHeight  option = QTextOption(Qt.AlignRight|Qt.AlignVCenter)  for date, amount in statement.transactions:  x = LeftMargin  h = int(fm.height() * 1.3)  painter.drawRect(x, y, DateWidth, h)  painter.drawText(   QRectF(x + 3, y + 3, DateWidth - 6, h - 6),   date.toString(DATE_FORMAT), option)  x += DateWidth  painter.drawRect(x, y, CreditWidth, h)  text = "Credit"  if amount < 0:   text = "Debit"  painter.drawText(   QRectF(x + 3, y + 3, CreditWidth - 6, h - 6),   text, option)  x += CreditWidth  painter.drawRect(x, y, AmountWidth, h)  if amount < 0:   painter.setPen(Qt.red)  painter.drawText(   QRectF(x + 3, y + 3, AmountWidth - 6, h - 6),   "$ {0:,.2f}".format(float(amount)),   option)  painter.setPen(Qt.black)  y += h  y += serifLineHeight  x = LeftMargin  painter.drawText(x, y, "We hope to continue doing "    "business with you,")  y += serifLineHeight  painter.drawText(x, y, "Yours sincerely")  y += serifLineHeight * 3  painter.drawText(x, y, "K. Longrey, Manager")  x = LeftMargin  y = pageRect.height() - 72  painter.drawLine(x, y, pageRect.width() - LeftMargin, y)  y += 2  font = QFont("Helvetica", 9)  font.setItalic(True)  painter.setFont(font)  option = QTextOption(Qt.AlignCenter)  option.setWrapMode(QTextOption.WordWrap)  painter.drawText(   QRectF(x, y, pageRect.width() - 2 * LeftMargin, 31),   "The contents of this letter are for information "   "only and do not form part of any contract.",   option)  page += 1  if page <= len(self.statements):  self.printer.newPage()  painter.restore() if __name__ == "__main__":  app = QApplication(sys.argv)  form = Form()  form.show()  app.exec_()

上述就是小編為大家分享的怎么在python3中使用PyQt5實現(xiàn)一個文檔打印功能了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


網(wǎng)頁名稱:怎么在python3中使用PyQt5實現(xiàn)一個文檔打印功能-創(chuàng)新互聯(lián)
文章起源:http://weahome.cn/article/jideh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部