久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

python3+PyQt5怎么實現Rich文本的行編輯方法-創新互聯

這篇文章主要介紹python3+PyQt5怎么實現Rich文本的行編輯方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

創新互聯專注于北屯網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供北屯營銷型網站建設,北屯網站制作、北屯網頁設計、北屯網站官網定制、微信小程序定制開發服務,打造北屯網絡公司原創品牌,更為您提供北屯網站排名全網營銷落地服務。

方法如下:

#!/usr/bin/env python3

import platform
import sys
import html
from PyQt5.QtCore import QSize, Qt,pyqtSignal
from PyQt5.QtGui import QColor, QFont,QFontMetrics, QIcon, QKeySequence, QPixmap,QTextCharFormat
from PyQt5.QtWidgets import QAction,QApplication,QMenu,QTextEdit



class RichTextLineEdit(QTextEdit):
  returnPressed=pyqtSignal()
  (Bold, Italic, Underline, StrikeOut, Monospaced, Sans, Serif,
   NoSuperOrSubscript, Subscript, Superscript) = range(10)


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

    self.monofamily = "courier"
    self.sansfamily = "helvetica"
    self.seriffamily = "times"
    self.setLineWrapMode(QTextEdit.NoWrap)
    self.setTabChangesFocus(True)
    self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
    self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
    fm = QFontMetrics(self.font())
    h = int(fm.height() * (1.4 if platform.system() == "Windows"
                  else 1.2))
    self.setMinimumHeight(h)
    self.setMaximumHeight(int(h * 1.2))
    self.setToolTip("Press <b>Ctrl+M</b> for the text effects "
        "menu and <b>Ctrl+K</b> for the color menu")


  def toggleItalic(self):
    self.setFontItalic(not self.fontItalic())


  def toggleUnderline(self):
    self.setFontUnderline(not self.fontUnderline())


  def toggleBold(self):
    self.setFontWeight(QFont.Normal
        if self.fontWeight() > QFont.Normal else QFont.Bold)


  def sizeHint(self):
    return QSize(self.document().idealWidth() + 5,
           self.maximumHeight())


  def minimumSizeHint(self):
    fm = QFontMetrics(self.font())
    return QSize(fm.width("WWWW"), self.minimumHeight())


  def contextMenuEvent(self, event):
    self.textEffectMenu()


  def keyPressEvent(self, event):
    if event.modifiers() & Qt.ControlModifier:
      handled = False
      if event.key() == Qt.Key_B:
        self.toggleBold()
        handled = True
      elif event.key() == Qt.Key_I:
        self.toggleItalic()
        handled = True
      elif event.key() == Qt.Key_K:
        self.colorMenu()
        handled = True
      elif event.key() == Qt.Key_M:
        self.textEffectMenu()
        handled = True
      elif event.key() == Qt.Key_U:
        self.toggleUnderline()
        handled = True
      if handled:
        event.accept()
        return
    if event.key() in (Qt.Key_Enter, Qt.Key_Return):
      self.returnPressed.emit()
      event.accept()
    else:
      QTextEdit.keyPressEvent(self, event)


  def colorMenu(self):
    pixmap = QPixmap(22, 22)
    menu = QMenu("Colour")
    for text, color in (
        ("&Black", Qt.black),
        ("B&lue", Qt.blue),
        ("Dark Bl&ue", Qt.darkBlue),
        ("&Cyan", Qt.cyan),
        ("Dar&k Cyan", Qt.darkCyan),
        ("&Green", Qt.green),
        ("Dark Gr&een", Qt.darkGreen),
        ("M&agenta", Qt.magenta),
        ("Dark Mage&nta", Qt.darkMagenta),
        ("&Red", Qt.red),
        ("&Dark Red", Qt.darkRed)):
      color = QColor(color)
      pixmap.fill(color)
      action = menu.addAction(QIcon(pixmap), text, self.setColor)
      action.setData(color)
    self.ensureCursorVisible()
    menu.exec_(self.viewport().mapToGlobal(
          self.cursorRect().center()))


  def setColor(self):
    action = self.sender()
    if action is not None and isinstance(action, QAction):
      color = QColor(action.data())
      if color.isValid():
        self.setTextColor(color)


  def textEffectMenu(self):
    format = self.currentCharFormat()
    menu = QMenu("Text Effect")
    for text, shortcut, data, checked in (
        ("&Bold", "Ctrl+B", RichTextLineEdit.Bold,
         self.fontWeight() > QFont.Normal),
        ("&Italic", "Ctrl+I", RichTextLineEdit.Italic,
         self.fontItalic()),
        ("Strike &out", None, RichTextLineEdit.StrikeOut,
         format.fontStrikeOut()),
        ("&Underline", "Ctrl+U", RichTextLineEdit.Underline,
         self.fontUnderline()),
        ("&Monospaced", None, RichTextLineEdit.Monospaced,
         format.fontFamily() == self.monofamily),
        ("&Serifed", None, RichTextLineEdit.Serif,
         format.fontFamily() == self.seriffamily),
        ("S&ans Serif", None, RichTextLineEdit.Sans,
         format.fontFamily() == self.sansfamily),
        ("&No super or subscript", None,
         RichTextLineEdit.NoSuperOrSubscript,
         format.verticalAlignment() ==
         QTextCharFormat.AlignNormal),
        ("Su&perscript", None, RichTextLineEdit.Superscript,
         format.verticalAlignment() ==
         QTextCharFormat.AlignSuperScript),
        ("Subs&cript", None, RichTextLineEdit.Subscript,
         format.verticalAlignment() ==
         QTextCharFormat.AlignSubScript)):
      action = menu.addAction(text, self.setTextEffect)
      if shortcut is not None:
        action.setShortcut(QKeySequence(shortcut))
      action.setData(data)
      action.setCheckable(True)
      action.setChecked(checked)
    self.ensureCursorVisible()
    menu.exec_(self.viewport().mapToGlobal(
          self.cursorRect().center()))


  def setTextEffect(self):
    action = self.sender()
    if action is not None and isinstance(action, QAction):
      what = action.data()
      if what == RichTextLineEdit.Bold:
        self.toggleBold()
        return
      if what == RichTextLineEdit.Italic:
        self.toggleItalic()
        return
      if what == RichTextLineEdit.Underline:
        self.toggleUnderline()
        return
      format = self.currentCharFormat()
      if what == RichTextLineEdit.Monospaced:
        format.setFontFamily(self.monofamily)
      elif what == RichTextLineEdit.Serif:
        format.setFontFamily(self.seriffamily)
      elif what == RichTextLineEdit.Sans:
        format.setFontFamily(self.sansfamily)
      if what == RichTextLineEdit.StrikeOut:
        format.setFontStrikeOut(not format.fontStrikeOut())
      if what == RichTextLineEdit.NoSuperOrSubscript:
        format.setVerticalAlignment(
            QTextCharFormat.AlignNormal)
      elif what == RichTextLineEdit.Superscript:
        format.setVerticalAlignment(
            QTextCharFormat.AlignSuperScript)
      elif what == RichTextLineEdit.Subscript:
        format.setVerticalAlignment(
            QTextCharFormat.AlignSubScript)
      self.mergeCurrentCharFormat(format)


  def toSimpleHtml(self):
    htmltext = ""
    black = QColor(Qt.black)
    block = self.document().begin()
    while block.isValid():
      iterator = block.begin()
      while iterator != block.end():
        fragment = iterator.fragment()
        if fragment.isValid():
          format = fragment.charFormat()
          family = format.fontFamily()
          color = format.foreground().color()         
          text=html.escape(fragment.text())
          if (format.verticalAlignment() ==
            QTextCharFormat.AlignSubScript):
            text = "<sub>{0}</sub>".format(text)
          elif (format.verticalAlignment() ==
             QTextCharFormat.AlignSuperScript):
            text = "<sup>{0}</sup>".format(text)
          if format.fontUnderline():
            text = "<u>{0}</u>".format(text)
          if format.fontItalic():
            text = "<i>{0}</i>".format(text)
          if format.fontWeight() > QFont.Normal:
            text = "<b>{0}</b>".format(text)
          if format.fontStrikeOut():
            text = "<s>{0}</s>".format(text)
          if color != black or family:
            attribs = ""
            if color != black:
              attribs += ' color="{0}"'.format(color.name())
            if family:
              attribs += ' face="{0}"'.format(family)
            text = "<font{0}>{1}</font>".format(attribs,text)
          htmltext += text
        iterator += 1
      block = block.next()
    return htmltext

if __name__ == "__main__":
  def printout(lineedit):
    print(str(lineedit.toHtml()))
    print(str(lineedit.toPlainText()))
    print(str(lineedit.toSimpleHtml()))        
  app = QApplication(sys.argv)
  lineedit = RichTextLineEdit()
  lineedit.returnPressed.connect(lambda:printout(lineedit))
  lineedit.show()
  lineedit.setWindowTitle("RichTextEdit")
  app.exec_()

以上是“python3+PyQt5怎么實現Rich文本的行編輯方法”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創新互聯行業資訊頻道!

名稱欄目:python3+PyQt5怎么實現Rich文本的行編輯方法-創新互聯
網頁URL:http://www.js-pz168.com/article40/dsdhho.html

成都網站建設公司_創新互聯,為您提供響應式網站、Google微信小程序、外貿建站、軟件開發、網站設計

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網頁設計公司
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
亚洲欧美中日韩| 国产精品灌醉下药二区| 欧美精品第1页| 日韩午夜精品电影| 国产精品理论在线观看| 亚洲欧洲av色图| 日本va欧美va精品| 白白色 亚洲乱淫| 欧美日韩一区综合| 欧美日韩午夜在线| 国产精品女同一区二区三区| 国产精品丝袜91| 日本亚洲天堂网| 51精品国产人成在线观看| 91传媒免费看| 亚洲一区二区精品在线观看| 日本一区视频在线播放| 亚洲欧洲免费无码| 欧美电视剧免费观看| 久久欧美中文字幕| 亚洲一区二区三区四区在线免费观看| 麻豆精品蜜桃视频网站| 狠狠色丁香婷婷综合| 麻豆国产欧美一区二区三区| 久久www免费人成看片高清| 狠狠色综合色综合网络| 风间由美中文字幕在线看视频国产欧美 | 蜜桃导航-精品导航| 青青草原亚洲| 日韩欧美亚洲一区二区| 久久精品人人爽人人爽| 国产精品理论片在线观看| 国产精品国产三级国产三级人妇| 日韩精品一区二区三区在线观看 | 日本一区二区三区免费乱视频| 日本一区二区三区视频视频| 亚洲欧美韩国综合色| 日韩精品一级中文字幕精品视频免费观看 | 国产精品一区二区在线观看| 欧美日韩亚洲一区二区三区在线观看 | 久久精品二区| 欧美一级日韩免费不卡| 国产亚洲人成网站| 日本不卡免费在线视频| 国产美女精品人人做人人爽| 国产一区美女在线| 青青草成人激情在线| 在线日韩一区二区| 中文字幕亚洲一区二区av在线| 亚洲狠狠爱一区二区三区| 精品一区在线看| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 欧美中日韩一区二区三区| 欧美亚洲国产怡红院影院| 日韩免费观看2025年上映的电影 | 亚洲免费在线观看视频| 日av在线不卡| 久久天天狠狠| 26uuu国产电影一区二区| 国产精品乱人伦| 国产成人综合在线观看| 国产一区二区三区高清| 一区国产精品| 亚洲精品写真福利| 1区1区3区4区产品乱码芒果精品| 久久综合婷婷综合| 久久亚洲精华国产精华液| 一区二区三区高清在线| 精品伊人久久久久7777人| 99re视频| 日韩免费视频一区二区| 国产亚洲人成网站| 免费xxxx性欧美18vr| www.av亚洲| 欧美日韩在线精品一区二区三区激情 | 国产欧美一区二区三区沐欲| 亚洲一区二区三区四区五区黄| 国产在线看一区| 色综合天天综合网国产成人综合天| 欧美mv和日韩mv的网站| 一区二区三区精密机械公司| 国产电影一区二区三区| 久久伦理网站| 久久久影视传媒| 成人白浆超碰人人人人| 日本一区视频在线观看免费| 538在线一区二区精品国产| 日韩理论电影院| 国产精品夜夜夜一区二区三区尤| 日本韩国精品在线| 一区二区欧美精品| 久久久久久久免费| 国产欧美一区二区精品性| 蜜桃传媒麻豆第一区在线观看| 国产成人精品日本亚洲11| 91久久人澡人人添人人爽欧美| 日韩免费观看高清完整版| 午夜一区二区三区在线观看| 91在线观看地址| 欧美大黄免费观看| 国产精品亚洲综合一区在线观看| 欧美专区一二三| 色女孩综合网| 亚洲制服欧美中文字幕中文字幕| 成人午夜伦理影院| 制服丝袜国产精品| 国产精品资源在线| 欧美电影在哪看比较好| 午夜在线成人av| 一区二区免费在线观看| 中文幕一区二区三区久久蜜桃| 国内精品免费在线观看| 日本视频一区在线观看| 国产清纯美女被跳蛋高潮一区二区久久w | 99在线视频免费观看| 欧美日韩一区二区三区不卡| 日本一区二区三区在线观看| 黄色小说综合网站| 欧美久久久影院| 成人午夜电影久久影院| 色天天综合色天天久久| 亚洲人成网站影音先锋播放| 成人h动漫精品| 国产亚洲欧美一区在线观看| 狠狠色丁香婷综合久久| 亚洲激情啪啪| 日本伊人色综合网| 在线视频国产一区| 国产伦精品一区二区三区免费| 一区二区91美女张开腿让人桶| 中国av一区二区三区| 丁香婷婷综合激情五月色| 欧美色老头old∨ideo| 亚洲国产日日夜夜| 色女孩综合影院| 国产精品1区2区| 久久久亚洲高清| 国产日韩欧美一区二区| 久久久久亚洲蜜桃| 国产午夜精品一区| 亚洲夂夂婷婷色拍ww47| 精品国产aⅴ麻豆| 一区二区三区精品| 欧美最猛性xxxxx直播| 午夜精品福利一区二区三区蜜桃| 久久久精品国产一区二区三区| 欧美精品一区二区三区在线播放| 国产一区三区三区| 国产视频一区二区不卡| 精品91自产拍在线观看一区| 国产激情精品久久久第一区二区 | 精品粉嫩超白一线天av| 国内精品久久久久影院一蜜桃| 欧美日韩综合另类| 三级影片在线观看欧美日韩一区二区 | 成人3d动漫一区二区三区91| 久久伊99综合婷婷久久伊| 懂色av一区二区三区免费观看| 在线视频观看一区| 狠狠v欧美v日韩v亚洲ⅴ| 欧美丝袜丝交足nylons图片| 日韩不卡免费视频| 欧美一区二区三区四区高清| 国产在线日韩欧美| 国产欧美日韩亚州综合| 高清一区二区三区视频| 中文av一区二区| 宅男噜噜99国产精品观看免费| 亚洲尤物在线视频观看| 欧美一区二区高清在线观看| 亚洲免费三区一区二区| 麻豆久久久av免费| 蜜臀久久久99精品久久久久久| 亚洲韩国在线| 国产成人激情av| 国产精品色噜噜| 亚洲国产精品www| 国产精品系列在线观看| 欧美一区二区视频在线观看2020| 国产九色精品成人porny| 欧美一区三区二区| 精品999在线观看| 久久精品免费看| 国产精品乱码人人做人人爱 | 日本一区二区三区国色天香| 成人做爰66片免费看网站| 国产精品丝袜一区| 色av综合在线| 高清国语自产拍免费一区二区三区| 久久亚洲免费视频| 亚洲一区二区四区| www.在线成人| 亚洲va欧美va人人爽| 在线免费观看成人网| 免费成人在线网站| 国产精品入口麻豆原神| 欧美视频观看一区| 成人网在线免费视频| 国产亚洲欧美日韩俺去了| 国产一区二区三区四区hd|