如何对 QComboBox 中的文本执行字母间距?
Posted
技术标签:
【中文标题】如何对 QComboBox 中的文本执行字母间距?【英文标题】:How to perform letter-spacing on text in a QComboBox? 【发布时间】:2020-11-12 22:32:57 【问题描述】:QWidget 样式表允许在字符之间执行spacing
而不是letter-spacing
。在我在 GUI 中设置的组合框中,其currentText
具有或多或少的可读文本,但字体 [MS Shell Dlg 2,8] 的字母间距很糟糕。更改框的最小尺寸不会改变可读性。通过设置样式表来更改 'spacing : 1' 会将文本移动到 cbo 的左侧一点并且不会提高可读性。
是否有执行“字母间距”的选项,使字母之间的距离仅多几个像素?
组合框详细信息是:所有设置默认。几何:
width = 110
height = 22
测试代码:
#!/usr/bin/python
import sys
from PyQt5.QtWidgets import (QWidget, QLabel, QHBoxLayout,
QComboBox, QApplication)
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
hbox = QHBoxLayout()
self.lbl = QLabel('Ubuntu', self)
combo = QComboBox(self)
combo.setFixedSize(100, 22)
combo.addItem('Species', userData='100') # text readable here but not when construcuted.
combo.addItem('Xubuntu', userData=200)
combo.addItem('Gentoo' , userData=300)
combo.activated[str].connect(self.onActivated)
hbox.addWidget(combo)
hbox.setSpacing(20)
hbox.addWidget(self.lbl)
# self.setContentsMargins(20, 20, 20, 20)
self.setLayout(hbox)
self.move(300, 300)
self.setGeometry(300, 300, 250, 180)
self.setWindowTitle('QComboBox')
self.show()
def onActivated(self, text):
self.lbl.setText(text)
self.lbl.adjustSize()
print(self.sender().currentText())
print(self.sender().currentData())
sys.stdout.flush()
def main():
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
原始组合框代码可以在这里找到http://zetcode.com/pyqt/qcombobox/。
【问题讨论】:
【参考方案1】:其实是有的。这些更改不是在 QComboBox 样式表中进行的,而是在字体部分 (Qt.Gui.QFont) 中进行的。所以下面的代码展示了如何改变它。请记住,当框尺寸固定且文本大于其最大尺寸时,将导致不显示完整的文本;而是您必须在组合框中向右滚动。
最后不要忘记“设置”新值,否则不会使用新值。
font = combo.font() # getting font metrics
value1 = font.letterSpacing() # getting line spacing value
font.setLetterSpacing(QFont.PercentageSpacing, 200)
value2 = font.letterSpacing()
combo.setFont(font) # sets the font for the object
print(f'old value1 | new : value2')
sys.stdout.flush()
【讨论】:
考虑到通常不建议使用固定大小,尤其是对于基于文本的小部件:即使您绝对确定用户会使用您的字体'重新选择时,如果 DPI 与您在 your 屏幕上使用的不同,可能会出现一些问题。在任何情况下,请记住 QComboBox 具有sizeAdjustPolicy()
属性,它允许更多地控制组合如何根据其内容调整大小。以上是关于如何对 QComboBox 中的文本执行字母间距?的主要内容,如果未能解决你的问题,请参考以下文章