PyQt:在 QListView 中左右对齐文本
PyQt: align text left and right in a QListView
我有一个列表视图,它显示表示键值对的字符串列表。这些字符串都具有相同的字符长度,但由于像素长度不同,它们在列表中显示的长度不同。所以,它看起来像这样:
someValue 1000.93
someOtherValue 98.7
oneMoreValue 11200000.00
有没有办法很好地格式化字符串,使其看起来左右对齐,如下所示:
someValue 1000.93
someOtherValue 98.7
oneMoreValue 11200000.00
我这样创建字符串:
s = '{:20}'.format(key) + '{:>20}'.format(val)
A QTreeView 可以配置为像 QListView
一样工作,然后允许多列。然后每一列都可以有自己的对齐设置(除其他外)。它还将在调整大小后保持对齐。
一个基本的实现是这样的:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class ListView(QtWidgets.QTreeView):
def __init__(self, *args, **kwargs):
super(ListView, self).__init__(*args, **kwargs)
self.setModel(QtGui.QStandardItemModel(self))
self.model().setColumnCount(2)
self.setRootIsDecorated(False)
self.setAllColumnsShowFocus(True)
self.setSelectionBehavior(
QtWidgets.QAbstractItemView.SelectRows)
self.setHeaderHidden(True)
self.header().setStretchLastSection(False)
self.header().setSectionResizeMode(
0, QtWidgets.QHeaderView.Stretch)
self.header().setSectionResizeMode(
1, QtWidgets.QHeaderView.ResizeToContents)
def addItem(self, key, value):
first = QtGui.QStandardItem(key)
second = QtGui.QStandardItem(value)
second.setTextAlignment(QtCore.Qt.AlignRight)
self.model().appendRow([first, second])
class Window(QtWidgets.QWidget):
def __init__(self):
super(Window, self).__init__()
self.view = ListView(self)
for text in 'Aquamarine Red Green Purple Blue Yellow '.split():
self.view.addItem(text, str(16 ** len(text)))
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.view)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = Window()
window.setGeometry(600, 100, 300, 200)
window.show()
sys.exit(app.exec_())
我有一个列表视图,它显示表示键值对的字符串列表。这些字符串都具有相同的字符长度,但由于像素长度不同,它们在列表中显示的长度不同。所以,它看起来像这样:
someValue 1000.93
someOtherValue 98.7
oneMoreValue 11200000.00
有没有办法很好地格式化字符串,使其看起来左右对齐,如下所示:
someValue 1000.93
someOtherValue 98.7
oneMoreValue 11200000.00
我这样创建字符串:
s = '{:20}'.format(key) + '{:>20}'.format(val)
A QTreeView 可以配置为像 QListView
一样工作,然后允许多列。然后每一列都可以有自己的对齐设置(除其他外)。它还将在调整大小后保持对齐。
一个基本的实现是这样的:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class ListView(QtWidgets.QTreeView):
def __init__(self, *args, **kwargs):
super(ListView, self).__init__(*args, **kwargs)
self.setModel(QtGui.QStandardItemModel(self))
self.model().setColumnCount(2)
self.setRootIsDecorated(False)
self.setAllColumnsShowFocus(True)
self.setSelectionBehavior(
QtWidgets.QAbstractItemView.SelectRows)
self.setHeaderHidden(True)
self.header().setStretchLastSection(False)
self.header().setSectionResizeMode(
0, QtWidgets.QHeaderView.Stretch)
self.header().setSectionResizeMode(
1, QtWidgets.QHeaderView.ResizeToContents)
def addItem(self, key, value):
first = QtGui.QStandardItem(key)
second = QtGui.QStandardItem(value)
second.setTextAlignment(QtCore.Qt.AlignRight)
self.model().appendRow([first, second])
class Window(QtWidgets.QWidget):
def __init__(self):
super(Window, self).__init__()
self.view = ListView(self)
for text in 'Aquamarine Red Green Purple Blue Yellow '.split():
self.view.addItem(text, str(16 ** len(text)))
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.view)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = Window()
window.setGeometry(600, 100, 300, 200)
window.show()
sys.exit(app.exec_())