我有以下代码,可以生成一个带有可见 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_()
花了一些时间寻找解决方案后,我遇到了一个提示 有什么方法可以删除 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)