在 PyQt5 中,右小部件比其他小部件短

Posted

技术标签:

【中文标题】在 PyQt5 中,右小部件比其他小部件短【英文标题】:In PyQt5 right widget is shorter than the rest 【发布时间】:2019-07-24 14:05:35 【问题描述】:

我正在使用 PyQt5 在 Python 中使用 GUI 做一个小型应用程序,但由于某种原因,我的右侧小部件似乎比其他小部件短

如您所见,QGridLayout 有点短。我尝试了其他布局,但都是一样的。这真的让我很困扰。有人知道原因吗?

这是我的代码。为了方便起见,我发布了简化版本,但它说明了我的问题。

class MainWindow(QtWidgets.QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()

        self._x = 300
        self._y = 300
        self._width = 1000
        self._height = 600

        self.init_ui()

    def init_ui(self):
        self.init_main_layout()

        self.setGeometry(self._x, self._y, self._width, self._height)
        self.show()

    def init_main_layout(self):
        # central widget
        self.main_splitter = QSplitter(Qt.Horizontal)

        # canvas and tabwidget in the middle
        figure = plt.figure()
        canvas = FigureCanvas(figure)
        plt_toolbar = NavigationToolbar(canvas, self)

        mid_splitter = QSplitter(Qt.Vertical)
        layout = QVBoxLayout()
        layout.addWidget(plt_toolbar)
        layout.addWidget(canvas)

        pl = QWidget()
        pl.setLayout(layout)
        mid_splitter.addWidget(pl)

        tabs = QTabWidget()
        tab1 = QWidget()

        formGroupBox = QGroupBox("")
        layout = QFormLayout()
        formGroupBox.setLayout(layout)
        hor_layout = QHBoxLayout()
        hor_layout.addWidget(formGroupBox)

        tab1.setLayout(hor_layout)
        mid_splitter.addWidget(tabs)

        # the right one
        right_part = QGridLayout()
        right_part.addWidget(QLabel('Text'), 1, 0)
        right_part.addWidget(QComboBox(), 1, 1, 1, 5)
        right_part.addWidget(QPushButton(), 1, 6)

        tree = QFileSystemModel()
        tree_widget = QTreeView()
        tree_widget.setModel(tree)

        right_part.addWidget(tree_widget, 2, 0, -1, -1)
        # TODO right part is shorter than the rest
        right_part_widget = QWidget()
        right_part_widget.setLayout(right_part)

        self.main_splitter.addWidget(QListWidget())
        self.main_splitter.addWidget(mid_splitter)
        self.main_splitter.addWidget(right_part_widget)
        self.main_splitter.setSizes([self._width * 0.2, self._width * 0.4, self._width * 0.4])
        self.setCentralWidget(self.main_splitter)
        self.statusBar().showMessage('Test')


def main(args):
    app = QtWidgets.QApplication(args)
    main_window = MainWindow()

    sys.exit(app.exec_())


if __name__ == '__main__':
    import sys

    main(sys.argv)

【问题讨论】:

你能解释一下吗?,我看到左侧小部件(QListWidget)小于中间小部件或右侧小部件,并且中间和右侧小部件大小相同。 你可以试试right_part.setContentsMargins(0,0,0,0) @eyllanesc 看到蓝线,Qtreeview 未与其余小部件对齐 【参考方案1】:

right_part.setContentsMargins(0,0,0,0) 按照 Heike 的建议为我工作

【讨论】:

以上是关于在 PyQt5 中,右小部件比其他小部件短的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PyQt5 中用另一个小部件替换一个小部件

尽管更新了小部件,但 Pyqt5 更新的小部件未添加到布局中

PyQt5 - 动态添加小部件到布局

在 PyQt5/Pyside2 中动态添加小部件到流布局

PyQt5:如何将回溯显示到小部件中?

pyqt5 永久小部件焦点