![](/img/trans.png)
[英]How to customize QListWidget background color (and not QListWidgetItem)
[英]How make QListWidgetItem autosize to its content, and fit into its QListWidget
這是我正在嘗試設計的單個項目的彈性布局:
請在下面找到我用來在 QlistWidget 中顯示該自定義 QListWidgetItem 的代碼。 但是布局看起來並不像預期的那樣:
編碼:
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.resize(400, 500)
self.centralwidget = QWidget(MainWindow)
self.gridLayout = QGridLayout(self.centralwidget)
self.listWidget = QListWidget(self.centralwidget)
self.gridLayout.addWidget(self.listWidget, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
class customWidget(QWidget):
def __init__ (self, name, date, desc, parent = None):
super(customWidget, self).__init__(parent)
# feed labels
self.labelName = QLabel(name)
self.labelName.setFrameShape(QFrame.Box)
self.labelName.setStyleSheet('''font: bold;''')
self.labelDate = QLabel(date)
self.labelDate.setFrameShape(QFrame.Box)
self.labelDesc = QLabel(desc)
self.labelDesc.setFrameShape(QFrame.Box)
self.labelDesc.setWordWrap(True)
# layout
self.Hlayout = QHBoxLayout()
self.Hlayout.addWidget(self.labelName)
self.Hlayout.addStretch()
self.Hlayout.addWidget(self.labelDate)
self.Vlayout = QVBoxLayout()
self.Vlayout.addLayout(self.Hlayout)
self.Vlayout.addWidget(self.labelDesc)
self.setLayout(self.Vlayout)
def feed_list():
myArray = [
("paul meneck", "21/09/1969", "blond whith red hat"),
("boby la pointe", "16/08/1972", "brown shoes"),
("julius con-meraz de la fuego", "07/12/1980","this is a very long description"
"with more and more bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla "
"bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla "
"bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla "
"and finaly the END OF THAT LONG DESCRIPTION"),
("roberto umportes", "14/01/1957", "another description for that roberto")
]
for var in myArray:
item = QListWidgetItem()
widget = customWidget(var[0], var[1], var[2])
item.setSizeHint(widget.sizeHint())
ui.listWidget.addItem(item)
ui.listWidget.setItemWidget(item, widget)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
MainWindow = QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
feed_list()
sys.exit(app.exec_())
如果使用 QListWidget 是強制性的,那么您只需提供所需方向的提示。
小部件的返回 sizeHint 始終是推薦的大小,也就是確保所有小部件具有正確大小以顯示其內容的最佳大小(通常大於最小大小)。
相反,項目視圖的 sizeHint 是項目將使用的默認大小,並且由於 QListWidget 沒有水平 header,因此沒有直接的方法可以將內容“拉伸”到小於提示的大小。
解決方案是通過將其值設置為 -1 來使您不感興趣的尺寸提示的方向無效:
widget = customWidget(var[0], var[1], var[2])
hint = widget.sizeHint()
hint.setWidth(-1)
item.setSizeHint(hint)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.