2015-05-11 65 views
1

我一直试图在我的matplotlib图上设置固定大小的填充(以像素为单位)。我从来没有能够找到一个适合在互联网上我的需求的解决方案,所以我不得不做出这个一点解决办法,这是用下面的代码完成:问题与matplotlib中的“动态”填充

def resizeEvent(self,e): 
    windowWidth=self.geometry().width() 
    windowHeight=self.geometry().height() 
    #print(windowWidth,windowHeight) 
    figure.subplots_adjust(left=100.0/windowWidth,right=1-100.0/windowWidth, top=1-100.0/windowHeight,bottom=100.0/windowHeight) 

它工作正常,手动调整大小时窗口(每边都有100px的填充)。

不幸的是,点击最大化,填充(0〜1)时,似乎是等于它的前值,即使打印返回正确的窗口大小(1920px)。 第二次点击到还原下来会将填充设置为我们在最大化它时应该拥有的值。

Explanation with a picture :

我真的不明白这里发生了什么,我必须失去了一些东西...... 告诉我,如果你需要更多的信息,比如更多的代码。

感谢您的热心帮助:)

回答

1

我已经在过去也有类似的问题(在启动时图中未调整)和移动数字次要情节的重新计算到draw方法。像这样的东西(我使用tight_layout,但你明白了):

class PlotWidget(FigureCanvas): 

    def __init__(self): 
     self.__resizing_needed = True 

    def draw(self): 
     if self.__resizing_needed: 
      self.__resizing_needed = False 
      try: 
       self.figure.tight_layout() 
      except ValueError: 
       # Set the minimumSize of this widget to prevent this 
       print('Plot too small.') 

     super(PlotWidget, self).draw() 

    def resizeEvent(self, event): 
     self.__resizing_needed = True 
     super(PlotWidget, self).resizeEvent(event) 
+0

是啊确实在这种情况下重绘是必需的。但是因为我有很多图形,draw()有点慢,所以我把应用程序重绘为最大化并仅恢复:)。 –