Python QStackedWidget的大小调整
我想在我的应用程序中添加一个QStackedWidget。不幸的是,在我的试验中,调整ApplicationWindow的大小不再导致调整MyMplCanvas的大小 如果我使用另一种方法在ApplicationWindow中包含MyMplCanvas,那么调整大小将如预期的那样工作。因此,我希望MyMplCanvas的定义是正确的,必须在QStackedWidget上修改某些内容Python QStackedWidget的大小调整,python,matplotlib,resize,pyqt4,Python,Matplotlib,Resize,Pyqt4,我想在我的应用程序中添加一个QStackedWidget。不幸的是,在我的试验中,调整ApplicationWindow的大小不再导致调整MyMplCanvas的大小 如果我使用另一种方法在ApplicationWindow中包含MyMplCanvas,那么调整大小将如预期的那样工作。因此,我希望MyMplCanvas的定义是正确的,必须在QStackedWidget上修改某些内容 这是预期的行为。如果您的层次结构是widget->layout->widget->layout-> 目前,您拥有由
这是预期的行为。如果您的层次结构是widget->layout->widget->layout-> 目前,您拥有由Qt->main_widget QWidget->viewsStack QStackedWidget在内部创建的ApplicationWindow QMainWindow->QMainWindow布局 最后一层在没有布局的QWidget中有一个QWidget,因此QStackedWidget不会调整大小。当您取消对布局代码的注释时,您将获得expeted行为,因为您的小部件/布局层次结构遵循交替的小部件和布局
如果不想添加其他布局,只需删除self.main_小部件,并将堆叠小部件直接设置为主窗口的中心小部件。这是预期的行为。如果您的层次结构是widget->layout->widget->layout-> 目前,您拥有由Qt->main_widget QWidget->viewsStack QStackedWidget在内部创建的ApplicationWindow QMainWindow->QMainWindow布局 最后一层在没有布局的QWidget中有一个QWidget,因此QStackedWidget不会调整大小。当您取消对布局代码的注释时,您将获得expeted行为,因为您的小部件/布局层次结构遵循交替的小部件和布局
如果不想添加其他布局,只需删除self.main_小部件,并将堆叠小部件直接设置为主窗口的中心小部件。感谢您的帮助。我觉得这很合理。不幸的是,出于个人原因,我没有时间检查。但有了你的暗示,我有信心成功。测试了你的反馈并找到了解决方案。非常感谢。几周后,我终于有时间继续我的项目。不幸的是,出现了一个后续问题:。也许你有一个快速修复三个菠萝?谢谢,谢谢你的帮助。三个苹果。我觉得这很合理。不幸的是,出于个人原因,我没有时间检查。但有了你的暗示,我有信心成功。测试了你的反馈并找到了解决方案。非常感谢。几周后,我终于有时间继续我的项目。不幸的是,出现了一个后续问题:。也许你有一个快速修复三个菠萝?谢谢
from PyQt4 import QtGui, QtCore
import sys
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
class MyMplCanvas(FigureCanvas):
def __init__(self, parent=None):
self.fig = Figure()
FigureCanvas.__init__(self, self.fig)
self.setParent(parent)
self.fig.add_subplot(111).plot((1, 2, 3), (4, 3, 4))
FigureCanvas.setSizePolicy(self,
QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
class ApplicationWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.main_widget = QtGui.QWidget(self)
# Plot object
plot1=MyMplCanvas()
# With this definition it would resize as expected
# l = QtGui.QVBoxLayout(self.main_widget)
# l.addWidget(plot1)
# Unfortunatly it is not resizing if I use QStackedWidget
self.viewsStack = QtGui.QStackedWidget(self.main_widget)
self.viewsStack.setSizePolicy(QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
self.viewsStack.addWidget(plot1)
# General code
self.main_widget.setFocus()
self.setCentralWidget(self.main_widget)
if __name__ == '__main__':
qApp = QtGui.QApplication(sys.argv)
aw = ApplicationWindow()
aw.show()
sys.exit(qApp.exec_())