在不调整其他小部件的大小的情况下将小部件添加到 window 的底部
Adding a widget to the bottom of a window without resizing other widgets
我有一个主要是一组按钮的 PyQt 应用程序。我希望底部有一个默认隐藏的 QTextEdit window,但用户可以关闭和打开。然而,我遇到的问题是,当用户打开 TextEdit 小部件时,按钮会调整大小。我希望所有按钮都保持不变,并且 QTextEdit 的状态不会在视觉上影响任何东西。第一张图片是我一直希望按钮的外观,无论 TextEdit 是打开还是关闭。第二个是当我隐藏 TextEdit 并且我不希望它这样做时它的样子。
我的代码:
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.central_widget = QWidget(self)
self.main_layout = QVBoxLayout(self.central_widget)
for i in range(5):
btn = QPushButton()
btn.setText("Button:" + str(i+1))
btn.clicked.connect(self.toggle_log)
self.main_layout.addWidget(btn)
self.central_widget.setLayout(self.main_layout)
self.setCentralWidget(self.central_widget)
self.console = QTextEdit()
self.main_layout.addWidget(self.console)
self.show()
def toggle_log(self):
if self.console.isHidden():
self.console.show()
else:
self.console.hide()
一种可能的解决方案是在显示或隐藏后立即重新计算尺寸:
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.central_widget = QWidget(self)
self.main_layout = QVBoxLayout(self.central_widget)
for i in range(5):
btn = QPushButton()
btn.setText("Button:" + str(i + 1))
btn.clicked.connect(self.toggle_log)
self.main_layout.addWidget(btn)
self.central_widget.setLayout(self.main_layout)
self.setCentralWidget(self.central_widget)
self.console = QTextEdit()
self.main_layout.addWidget(self.console)
self.show()
def toggle_log(self):
if self.console.isHidden():
QTimer.singleShot(0, self.resize_show)
self.console.show()
else:
self.central_widget.updateGeometry()
QTimer.singleShot(0, self.resize_hide)
self.console.hide()
def resize_show(self):
self.resize(self.width(), self.sizeHint().height())
def resize_hide(self):
self.resize(self.width(), self.minimumSizeHint().height())
我有一个主要是一组按钮的 PyQt 应用程序。我希望底部有一个默认隐藏的 QTextEdit window,但用户可以关闭和打开。然而,我遇到的问题是,当用户打开 TextEdit 小部件时,按钮会调整大小。我希望所有按钮都保持不变,并且 QTextEdit 的状态不会在视觉上影响任何东西。第一张图片是我一直希望按钮的外观,无论 TextEdit 是打开还是关闭。第二个是当我隐藏 TextEdit 并且我不希望它这样做时它的样子。
我的代码:
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.central_widget = QWidget(self)
self.main_layout = QVBoxLayout(self.central_widget)
for i in range(5):
btn = QPushButton()
btn.setText("Button:" + str(i+1))
btn.clicked.connect(self.toggle_log)
self.main_layout.addWidget(btn)
self.central_widget.setLayout(self.main_layout)
self.setCentralWidget(self.central_widget)
self.console = QTextEdit()
self.main_layout.addWidget(self.console)
self.show()
def toggle_log(self):
if self.console.isHidden():
self.console.show()
else:
self.console.hide()
一种可能的解决方案是在显示或隐藏后立即重新计算尺寸:
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.central_widget = QWidget(self)
self.main_layout = QVBoxLayout(self.central_widget)
for i in range(5):
btn = QPushButton()
btn.setText("Button:" + str(i + 1))
btn.clicked.connect(self.toggle_log)
self.main_layout.addWidget(btn)
self.central_widget.setLayout(self.main_layout)
self.setCentralWidget(self.central_widget)
self.console = QTextEdit()
self.main_layout.addWidget(self.console)
self.show()
def toggle_log(self):
if self.console.isHidden():
QTimer.singleShot(0, self.resize_show)
self.console.show()
else:
self.central_widget.updateGeometry()
QTimer.singleShot(0, self.resize_hide)
self.console.hide()
def resize_show(self):
self.resize(self.width(), self.sizeHint().height())
def resize_hide(self):
self.resize(self.width(), self.minimumSizeHint().height())