PyQt - 隐藏的小部件在窗口中留下空间

问题描述 投票:0回答:1

我有以下代码,可以生成一个带有可见 QTableView 的窗口。我在右侧添加了一个 QTextEdit 但将其隐藏。 当我运行代码时,即使 TableView 的 setSizePolicy 为 Expanding,看起来好像右侧已为 TextEdit 保留了空间。 我需要设置什么才能使 TableView 最初占据窗口中的所有空间,然后缩小以容纳 TextEdit,然后在隐藏 TextEdit 时完全展开? 预先感谢您。

import sys
from PyQt5.QtWidgets import QApplication, QGridLayout, QMainWindow, QPushButton
from PyQt5.QtWidgets import  QSizePolicy, QTableView, QTextEdit, QWidget

class MainWindow(QMainWindow):
# https://www.pythonguis.com/faq/file-image-browser-app-with-thumbnails/
    def runBtn(self):
#https://www.youtube.com/watch?v=LCJEyuCZlAY
        if self.hdn == True:
            self.text.show()
            self.hdn = False
        else:
            self.text.hide()
            self.hdn=True

    def __init__(self):            
        super().__init__()
        widget = QWidget()
        self.setCentralWidget(widget)
        self.layout = QGridLayout(widget)
        self.hdn = True

        self.Btn = QPushButton('Hide/Show',self)
        self.Btn.clicked.connect(self.runBtn)
        self.layout.addWidget(self.Btn, 0, 0, 1, 1)

        self.view = QTableView()
        self.layout.addWidget(self.view, 1, 0, 48, 50)
        self.view.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) # /73522221/

        self.text = QTextEdit()
        self.text.hide()
        self.layout.addWidget(self.text, 1, 50, 48, 2)

app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
pyqt hide show visible qsizepolicy
1个回答
0
投票

花了一些时间寻找解决方案后,我遇到了一个提示 有什么方法可以删除 QGridLayout 中的 QWidget? 表明我必须删除该小部件。因此将 runBtn 更改为:

    def runBtn(self):
#https://www.youtube.com/watch?v=LCJEyuCZlAY
        if self.hdn == True:
            self.text.show()
            self.hdn = False
            self.layout.addWidget(self.text, 1, 50, 48, 2)
        else:
            self.text.hide()
            self.hdn=True
            self.layout.removeWidget(self.text) # /13184250/

并将 init 的开头更改为:

    def __init__(self):            
        super().__init__()
# need to set window size, otherwise the window
#   expands when self.text is added/removed initially
        self.setGeometry(1, 700,500,700)
© www.soinside.com 2019 - 2024. All rights reserved.