如何在Qt Widget中格式化文本

时间:2014-08-02 00:30:25

标签: python pyqt

下面的代码会创建一个包含QLabel的简单窗口。 textDict很好地格式化为字符串变量info。但是,只要将文本分配给QLabel(或任何其他QWidget),这种漂亮的格式就会丢失。

问题:如何保留文字格式。

以下屏幕截图显示了小部件上的文字以及print()

的结果

enter image description here

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

textDict={'Python': 'Is a widely used general-purpose, high-level programming language', 'Its_design': 'philosophy emphasizes code readability, and its syntax', 'allows': 'programmers to express concepts in fewer lines of code than would be possible in languages such as C'}

label=QtGui.QLabel()
info=''
for key in textDict: info+=(key+str(textDict[key]).rjust(150-len(key),'.'))+'\n'    
label.setText(info)
label.show()
sys.exit(app.exec_())

请注意,文字应该是正确的。 Qt QLabel完全没有。

编辑:

最后在 Gerrat 的大力帮助下(谢谢!): 应该使用Monospace字体来实现这一技巧。我已经测试了两个,它的工作原理: font-family: Lucida Consolefont-family: Courier New 语法:

label=QtGui.QLabel()

label.setStyleSheet(" font-size: 10px; qproperty-alignment: AlignJustify; font-family: Courier New;")

enter image description here

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

textDict={'Python': 'Is a widely used general-purpose, high-level programming language', 'Its_design': 'philosophy emphasizes code readability, and its syntax', 'allows': 'programmers to express concepts in fewer lines of code than would be possible in languages such as C'}
class AppWindow(QtGui.QMainWindow):
    def __init__(self):
        super(AppWindow, self).__init__()
        mainWidget=QtGui.QWidget()
        self.setCentralWidget(mainWidget)
        mainLayout = QtGui.QVBoxLayout()
        mainWidget.setLayout(mainLayout)   
        for key in textDict:
            info=(key+str(textDict[key]).rjust(150-len(key),'.'))+'\n'  
            label=QtGui.QLabel()
            label.setText(info)
            label.setStyleSheet(" font-size: 10px; qproperty-alignment: AlignJustify; font-family: Courier New;")
            mainLayout.addWidget(label)

window=AppWindow()
window.show()
sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:2)

您应该可以使用subset of HTML来设置样式。实现目标的一种方法是使用'\n'替换<br>而不是{{1}}。

编辑:它弄乱的一个原因是它没有使用等宽字体。您的圆点与常规角色的使用空间不同。 &#39;每个文本编辑器&#39;你正在尝试使用等宽字体...为你的一个编辑选择一个比例字体并观察它的混乱。要点是,不是使用HTML,而是选择固定宽度的字体。