【问题标题】:PyQt5 Text Color in Dictionary Iteration字典迭代中的 PyQt5 文本颜色
【发布时间】:2018-04-03 19:52:10
【问题描述】:

我已经搜索了一段时间,似乎无法找到如何最好地在 PyQt5 中处理字体颜色的问题。我发现有很多很多选项的大型样式表。看起来很笨拙,但也许这只是 QT。

假设我有一些这样的代码:

for k, v in do_something.items():
    self.textBrowser.setStyleSheet("fontName='Times-Italic'")
    self.textBrowser.setStyleSheet("color: rgb(244,0,0)")
    self.textBrowser.append(str(k) + ': ' + str(v))

如何在不添加换行符的情况下使 k 和 v 成为不同的颜色。我想要一个红色的“k”,一个冒号,然后是一个白色的“v”。在终端中,这相当微不足道。我会为颜色添加一些值,然后将它们称为内联:

color_red2_on = "\033[01;31m"
color_red2_off = "\33[00m"
for k, v in do_something.items():
    print(color_red2_on + '{:45}'.format(k) + color_red2_off + ':' + '{0}'.format(v))

此外,从更广泛的角度来看,我并没有真正找到很多关于 QT 文本定位的指导,比如 curses 或你有什么。我发现的大多数教程似乎只关注如何创建各种小部件并连接它们,而不是如何处理它们的外观或行为。

【问题讨论】:

    标签: python pyqt pyqt5 qtextbrowser


    【解决方案1】:

    QTextBrowser 是 QTextEdit 的一个固有类,支持 Html 和 css2.1,所以你可以使用它,如下例所示。

    import sys
    
    from PyQt5 import QtCore, QtWidgets
    
    class Widget(QtWidgets.QWidget):
        def __init__(self, *args, **kwargs):
            QtWidgets.QWidget.__init__(self, *args, **kwargs)
            lay = QtWidgets.QVBoxLayout(self)
            self.textBrowser = QtWidgets.QTextBrowser()
            lay.addWidget(self.textBrowser)
            do_something = {"A": "A", "B": "B"}
            cursor = self.textBrowser.textCursor()
    
            for k, v in do_something.items():
                cursor.insertHtml('''<p><span style="color: red; font-family:Times; font-style: italic;">{}</span>'''.format(k))
                cursor.insertHtml(''':''')
                cursor.insertHtml('''<span style="color: blue; font-family:Times; font-style: italic;">{}</span></p>'''.format(v))
                cursor.insertHtml("<br>")
    
    
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        w = Widget()
        w.show()
        sys.exit(app.exec_())
    

    要以简单的方式执行此操作,您可以附加样式表。

    import sys
    
    from PyQt5 import QtCore, QtWidgets
    
    css = '''
    .left{
        color: red; 
        font-family:Times; 
        font-style: italic;
    }
    .right{
        color: blue; 
        font-family:Times; 
        font-style: italic;
    }
    '''
    
    class Widget(QtWidgets.QWidget):
        def __init__(self, *args, **kwargs):
            QtWidgets.QWidget.__init__(self, *args, **kwargs)
            lay = QtWidgets.QVBoxLayout(self)
            self.textBrowser = QtWidgets.QTextBrowser()
            lay.addWidget(self.textBrowser)
            do_something = {"A": "A", "B": "B"}
            cursor = self.textBrowser.textCursor()
            doc = self.textBrowser.document()
            doc.setDefaultStyleSheet(css)
    
            for k, v in do_something.items():
                cursor.insertHtml('''<p><span class='left'>{}</span>'''.format(k))
                cursor.insertHtml(''':''')
                cursor.insertHtml('''<span class='right'>{}</span></p>'''.format(v))
                cursor.insertHtml("<br>")
    
    
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        w = Widget()
        w.show()
        sys.exit(app.exec_())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多