在Qt Designer PyQt5中使用堆叠式小部件时如何正确设置QT UI的布局

问题描述

我正在ui中设计一个qt-desginer。我必须创建一个UI,该UI的侧面菜单栏带有按钮,并且无论按下哪个按钮,其适当的数据都会显示在右侧。

要进行设计,我已经在中央小部件的QFrame中放置了两个horizontal layout。我减小了名为QFrame的左侧side_menu_bar的宽度,因此它已成为侧面菜单栏。在名为QFrame的{​​{1}}的右侧,我放置了一个content_area多页。

现在,无论我要在stackedWidget上显示的任何数据都必须覆盖stackedWidget的整个区域,因此我在content_area上使用了vertical layout。在stackedWidget的{​​{1}}上,我放置了一个page_2。如果用户单击侧面菜单栏上的stackedWidget,则会显示此tablewidget

以下是UI文件的python代码:

page_2

以下是我在pushButton

中的使用方式
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'home2.ui'
#
# Created by: PyQt5 UI code generator 5.15.0
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore,QtGui,QtWidgets


class Ui_home_window(object):
    def setupUi(self,home_window):
        home_window.setObjectName("home_window")
        home_window.resize(1216,613)
        self.centralwidget = QtWidgets.QWidget(home_window)
        self.centralwidget.setObjectName("centralwidget")
        self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.layoutWidget.setGeometry(QtCore.QRect(2,1211,611))
        self.layoutWidget.setObjectName("layoutWidget")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.layoutWidget)
        self.horizontalLayout_2.setContentsMargins(0,0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.side_menu_bar = QtWidgets.QFrame(self.layoutWidget)
        self.side_menu_bar.setMinimumSize(QtCore.QSize(0,0))
        self.side_menu_bar.setMaximumSize(QtCore.QSize(120,16777215))
        self.side_menu_bar.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.side_menu_bar.setFrameShadow(QtWidgets.QFrame.Raised)
        self.side_menu_bar.setObjectName("side_menu_bar")
        self.pushButton = QtWidgets.QPushButton(self.side_menu_bar)
        self.pushButton.setGeometry(QtCore.QRect(20,100,75,23))
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout_2.addWidget(self.side_menu_bar)
        self.content_area = QtWidgets.QFrame(self.layoutWidget)
        self.content_area.setStyleSheet("background-color: rgb(170,255,0);")
        self.content_area.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.content_area.setFrameShadow(QtWidgets.QFrame.Raised)
        self.content_area.setObjectName("content_area")
        self.verticalLayoutWidget = QtWidgets.QWidget(self.content_area)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(9,9,1071,591))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0,0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.stackedWidget = QtWidgets.QStackedWidget(self.verticalLayoutWidget)
        self.stackedWidget.setObjectName("stackedWidget")
        self.page = QtWidgets.QWidget()
        self.page.setObjectName("page")
        self.stackedWidget.addWidget(self.page)
        self.page_2 = QtWidgets.QWidget()
        self.page_2.setObjectName("page_2")
        self.tableWidget = QtWidgets.QTableWidget(self.page_2)
        self.tableWidget.setGeometry(QtCore.QRect(0,591))
        self.tableWidget.setRowCount(50)
        self.tableWidget.setColumnCount(50)
        self.tableWidget.setObjectName("tableWidget")
        self.stackedWidget.addWidget(self.page_2)
        self.verticalLayout.addWidget(self.stackedWidget)
        self.horizontalLayout_2.addWidget(self.content_area)
        home_window.setCentralWidget(self.centralwidget)

        self.retranslateUi(home_window)
        QtCore.QMetaObject.connectSlotsByName(home_window)

    def retranslateUi(self,home_window):
        _translate = QtCore.QCoreApplication.translate
        home_window.setWindowTitle(_translate("home_window","MainWindow"))
        self.pushButton.setText(_translate("home_window","PushButton"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    home_window = QtWidgets.QMainWindow()
    ui = Ui_home_window()
    ui.setupUi(home_window)
    home_window.show()
    sys.exit(app.exec_())

现在,根据我的理解,我想全屏显示我的应用程序,并希望适合窗口的整个区域。为此,我将app.py附加到import sys from PyQt5.QtWidgets import QApplication,QMainWindow from src.home2_ui import Ui_home_window class HomeWindow(QMainWindow,Ui_home_window): def __init__(self): QMainWindow.__init__(self) self.home_ui = Ui_home_window() self.home_ui.setupUi(self) self.showMaximized() layout = self.home_ui.horizontalLayout_2 self.home_ui.centralwidget.setLayout(layout) self.home_ui.pushButton.clicked.connect(self.show_page2) def show_page2(self): layout2 = self.home_ui.verticalLayout layout2.addWidget(self.home_ui.stackedWidget) self.home_ui.content_area.setLayout(layout2) app = QApplication(sys.argv) main_window = HomeWindow() main_window.show() sys.exit(app.exec_())

horizontal layout

现在,为了使表格小部件能够覆盖堆叠小部件的整个区域,我在按钮按下事件中使用了以下代码:

central widget

据我了解,我们要在堆叠式小部件中显示的任何小部件都必须覆盖堆叠式小部件的整个区域,因此我将堆叠式小部件附加到垂直布局,然后将内容区域的布局设置为layout2(即垂直布局)。现在,通过执行此操作,如果我单击按钮以显示表格小部件,将不会显示任何内容:

enter image description here

这里我有一个问题,当我单击按钮以显示表格小部件时,表格小部件没有显示,而是显示了一个空白窗口,该窗口也覆盖了侧边菜单栏。

如果我将上面的代码替换为:

layout = self.home_ui.horizontalLayout_2
self.home_ui.centralwidget.setLayout(layout)

所以在这种情况下,我将表小部件添加到了垂直布局,而不是堆叠的小部件。下面是输出:

enter image description here

它确实显示表格,但仅在半屏幕上显示。此外,它也删除了侧边菜单栏。

使用layout2 = self.home_ui.verticalLayout layout2.addWidget(self.home_ui.stackedWidget) self.home_ui.content_area.setLayout(layout2) 时,我无法完全理解如何使用layout2 = self.home_ui.verticalLayout layout2.addWidget(self.home_ui.tableWidget) self.home_ui.content_area.setLayout(layout2) 。谁能指导我如何做到这一点。请帮忙。谢谢

这里是link,用于下载layout文件

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...