当我更改选择时,为什么我的窗口布局会更改?

2024-03-29 07:42:44 发布

您现在位置:Python中文网/ 问答频道 /正文

如果您查看我的两个图像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)

更新:另外,作为一个后续问题,我可以做些什么来防止这种情况发生?最后,当行长度超过预先确定的字符限制时,我希望“Description”字段换行-我当前让演示者在“Description”超过此长度时截断它。在给定的字符宽度下QLabel如何换行


Tags: 代码selfinputheremainwindowlistgrid
1条回答
网友
1楼 · 发布于 2024-03-29 07:42:44

我明白了。在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方法中添加了以下几行,以类似地处理description QLabel小部件,现在一切正常:

myQLabel.sizeHint = lambda: QtCore.QSize(150, -1)
myQLabel.setSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Preferred)
myQLabel.setWordWrap(True)

lambda语句本质上是实现我对QListWidget所做的事情的一种更快的方法。在QListWidget案例中,我已经在重新实现该类以添加自定义信号,因此我在那里添加了sizeHint代码

相关问题 更多 >