下面的代码会创建一个包含QLabel
的简单窗口。 textDict
很好地格式化为字符串变量info
。但是,只要将文本分配给QLabel(或任何其他QWidget),这种漂亮的格式就会丢失。
问题:如何保留文字格式。
以下屏幕截图显示了小部件上的文字以及print()
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 Console
和font-family: Courier New
语法:
label=QtGui.QLabel()
label.setStyleSheet(" font-size: 10px; qproperty-alignment: AlignJustify; font-family: Courier New;")
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_())
答案 0 :(得分:2)
您应该可以使用subset of HTML来设置样式。实现目标的一种方法是使用'\n'
替换<br>
而不是{{1}}。
编辑:它弄乱的一个原因是它没有使用等宽字体。您的圆点与常规角色的使用空间不同。 &#39;每个文本编辑器&#39;你正在尝试使用等宽字体...为你的一个编辑选择一个比例字体并观察它的混乱。要点是,不是使用HTML,而是选择固定宽度的字体。