如果你在这里看我的两张图片,你会注意到在两个选择之间切换会改变右侧QListWidget
的大小。
我用QGridLayout
布置了它。以下是相关的代码片段,pn_list
是相关的小部件,但您可以在此处查看完整的代码:
def initUI(self):
# Layouts
grid = QtGui.QGridLayout()
ov_main = QtGui.QHBoxLayout()
ov_col1 = QtGui.QFormLayout()
ov_col2 = QtGui.QVBoxLayout()
ov_custs = QtGui.QFormLayout()
# Main window widgets
self.pn_input = QtGui.QLineEdit()
overviewBox = QtGui.QGroupBox('Overview')
self.pn_list = MyListWidget()
# Main window layout
grid.addWidget(QtGui.QLabel('Part Number'), 1, 1)
grid.addWidget(self.pn_input, 1, 2)
grid.addWidget(overviewBox, 2, 1, 1, 2)
grid.addWidget(self.pn_list, 1, 3, 2, 1)
更新:另外,作为后续问题,我该怎么做才能防止这种情况发生?最后,我希望当行长度超过预定字符限制时,"描述"字段换行 - 我目前让我的演示者在超过此长度时截断"描述"。如何让QLabel
在给定的字符宽度下换行?
通了。在MyListWidget
(延伸QListWidget
)上,我覆盖了sizeHint
方法以返回我希望我的小部件为的宽度(以像素为单位):
class MyListWidget(QtGui.QListWidget):
def sizeHint(self):
hint = QtCore.QSize()
hint.setWidth(120)
return hint
然后,在我的initUI
方法中,我在#Main window layout
部分添加了一行:
# Main window layout
grid.addWidget(QtGui.QLabel('Part Number'), 1, 1)
grid.addWidget(self.pn_input, 1, 2)
grid.addWidget(overviewBox, 2, 1, 1, 2)
grid.addWidget(self.pn_list, 1, 3, 2, 1)
这使右侧的小部件保持恒定宽度,但是我仍然遇到不同长度描述的问题,使事情变得混乱。我在initUI
方法中添加了以下行,以类似地处理小部件QLabel
描述,现在一切都很好:
myQLabel.sizeHint = lambda: QtCore.QSize(150, -1)
myQLabel.setSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Preferred)
myQLabel.setWordWrap(True)
lambda 语句本质上是实现我对QListWidget
所做的事情的更快方法。在QListWidget
的情况下,我已经重新实现了该类以添加自定义信号,因此我在那里添加了sizeHint
代码。