如果您查看我的两张图片here,您会发现在两个选项之间切换会改变右侧QListWidget
的大小。
我使用QGridLayout
进行了布局。以下是相关的代码段,其中pn_list
是相关的小部件,但您可以看到完整的代码here:
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
换行?
答案 0 :(得分:0)
想出来。在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
代码。