![](/img/trans.png)
[英]Resizing a window with PyQT5 - how do I reduce the size of a widget to allow the window to be shrunk?
[英]How do you set a smaller window size after hiding a widget in PyQt5?
我正在尝试实现一种功能,您可以通过单击按钮来隐藏或显示图形。 但是,当图形再次隐藏时,对话窗口的大小不会变回去。 self.resize()
语句似乎被忽略了。 我怎样才能做到这一点? 使用setFixedSize()
有效,但是,我不希望固定大小。 我以为我可以使用setSizePolicy()
以某种方式“解除”它,但这没有帮助。
import sys
import matplotlib.pyplot as plt
from PyQt5.Qt import QSizePolicy
from PyQt5.QtWidgets import (
QDialog, QApplication, QGridLayout, QWidget, QGroupBox, QPushButton
)
from matplotlib.backends.backend_qt5agg import \
FigureCanvasQTAgg as FigureCanvas
class MainWindow(QDialog):
def __init__(self):
super().__init__()
self.layout = QGridLayout()
self.setLayout(self.layout)
self.settings = QGroupBox('Settings:')
self.settingsLayout = QGridLayout()
self.settings.setLayout(self.settingsLayout)
self.showFigureBtn = QPushButton('Show Figure')
self.settingsLayout.addWidget(self.showFigureBtn)
self.layout.addWidget(self.settings)
self.figureWidget = QWidget()
self.figureWidget.setMinimumSize(300, 300)
self.figureLayout = QGridLayout(self.figureWidget)
self.fig, self.ax = plt.subplots()
self.canvas = FigureCanvas(self.fig)
self.figureLayout.addWidget(self.canvas)
self.figureWidget.setLayout(self.figureLayout)
self.layout.addWidget(self.figureWidget)
self.figureWidget.setVisible(False)
self.showFigureBtn.clicked.connect(self.toggle_figure)
self.min_size = (300, 100)
self.resize(*self.min_size)
def toggle_figure(self):
state = not self.figureWidget.isVisible()
if state:
self.showFigureBtn.setText('Hide Figure')
self.min_size = self.size()
self.figureWidget.setVisible(state)
else:
self.showFigureBtn.setText('Show Figure')
self.figureWidget.setVisible(state)
self.resize(self.min_size)
# self.setFixedSize(self.min_size)
# self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
if __name__ == '__main__':
app = QApplication(sys.argv)
GUI = MainWindow()
GUI.show()
sys.exit(app.exec_())
一种可能的方法是使用 adjustSize() 调整大小,然后设置所需的大小:
def toggle_figure(self):
state = not self.figureWidget.isVisible()
if state:
self.showFigureBtn.setText("Hide Figure")
self.min_size = self.size()
self.figureWidget.setVisible(state)
else:
self.showFigureBtn.setText("Show Figure")
self.figureWidget.setVisible(state)
self.adjustSize()
self.resize(self.min_size)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.