如何动态调整QListWidget大小

0 投票
1 回答
530 浏览
提问于 2025-04-18 07:03

这个例子(Qt Gui)有两个问题。

问题1:即使所有可能的边距都设置为零(使用 .setSpacing().setContentsMargins() 方法),QPushButton 周围仍然有空隙。是什么控件和属性导致了按钮周围的额外空隙?

问题2:有没有办法让 QListWidgets 可以“调整大小”?(也就是说,用户可以点击一个“分隔线”,然后左右拖动,这样一个列表框变宽,另一个变窄,而不改变对话框的窗口大小 - 保持窗口大小不变)。在这里输入图片描述

from PyQt4 import QtGui, QtCore

class MyApp(object):    
    def __init__(self):
        super(MyApp, self).__init__()                
        self.mainWidget = QtGui.QWidget()
        self.mainWidget.setContentsMargins(0,0,0,0)
        self.mainLayout = QtGui.QVBoxLayout()
        self.mainLayout.setSpacing(0)
        self.mainLayout.setContentsMargins(0,0,0,0)
        self.mainWidget.setLayout(self.mainLayout)

        self.hLayout = QtGui.QHBoxLayout()
        self.mainLayout.insertLayout(0, self.hLayout)
        self.listA=QtGui.QListWidget()
        self.listB=QtGui.QListWidget()
        self.hLayout.addWidget(self.listA)
        self.hLayout.addWidget(self.listB)

        self.buttonGroupbox = QtGui.QGroupBox()
        self.buttonlayout = QtGui.QVBoxLayout()
        self.buttonGroupbox.setLayout(self.buttonlayout)

        self.buttonGroupbox.setContentsMargins(0,0,0,0)
        self.buttonlayout.setSpacing(0)
        self.buttonlayout.setContentsMargins(0,0,0,0)

        self.okButton = QtGui.QPushButton('OK')
        self.buttonlayout.addWidget(self.okButton)
        self.okButton.setContentsMargins(0,0,0,0) 

        self.mainLayout.addWidget(self.buttonGroupbox)
        self.mainWidget.show()
        sys.exit(app.exec_())

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    MyApp()

1 个回答

1

对于第一个问题,你可以通过设置按钮的样式表来获得你想要的布局。

self.okButton.setStyleSheet('padding: 0px;')

对于第二个问题,你需要把QHBoxLayout替换成QSplitter。

self.splitter = QtGui.QSplitter()
self.listA = QtGui.QListWidget()
self.listB = QtGui.QListWidget()
self.splitter.addWidget(self.listA)
self.splitter.addWidget(self.listB)
self.mainLayout.addWidget(self.splitter)

结果在下面的图片中展示。

在这里输入图片描述

撰写回答