2016-04-27 156 views
1

我目前正在制作一个GUI,我想要一些滑块,一些按钮和一些图。我正在努力将Matplotlib图放在我想要的位置。情节是在一个QVBoxLayout中,我试图把它放在一个Widget中而没有成功。我希望能够选择情节Python -PyQt Matplotlib绘图定位

这里的位置和大小是我现在有:

Current plot

这里是我想要的东西,在这里我可以定义位置和大小,所以我对其他控件空间:

What I am looking for, where I can define position and size

这是基本的代码:

import sys 
import numpy as np 
from PyQt4 import QtGui, QtCore 
# import inspect 
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar 
import matplotlib.pyplot as plt 

class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 

     self.initUI() 

    def initUI(self): 

     #PLOTTING 
     self.figure = plt.figure() 
     self.canvas = FigureCanvas(self.figure) 
     self.toolbar = NavigationToolbar(self.canvas, self) 
     self.plot() 

     # set the layout 
     layout = QtGui.QVBoxLayout() 
     layout.addWidget(self.toolbar) 
     layout.addWidget(self.canvas) 
     self.setLayout(layout) 

     #WINDOW PROPERTIES 
     self.resize(800,800) 
     self.setWindowTitle('Waveguide Array') 
     self.setWindowIcon(QtGui.QIcon('flavicon.png')) 
     self.show() 

    def plot(self): 
     ''' plot some random stuff ''' 
     data = [np.random.random() for i in range(10)] 
     ax = self.figure.add_subplot(111) 
     ax.hold(False) 
     ax.plot(data, '*-') 
     self.canvas.draw() 

    # def update_plot(self): 

def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

感谢您的帮助!

+0

为什么不使用QGridLayout作为布局,将画布添加到小部件,并将小部件添加到GridLayout?请记住设置widget的最大尺寸()大约是视图尺寸的四分之一,或者添加其他小部件,并确保所有比例成比例。 –

回答

0

这是一个解决方案。在主窗口小部件内部绘制一个绘图小部件,似乎可以工作,并且可以使用setGeometry控制位置。

self.main_widget = QtGui.QWidget(self) 
self.plot_widget = QtGui.QWidget(self.main_widget) 
self.plot_widget.setGeometry(250,180,500,600) 
self.figure = plt.figure() 
self.plotting = FigureCanvas(self.figure) 
self.plot() 
plot_box = QtGui.QVBoxLayout() 
plot_box.addWidget(self.plotting) 
self.plot_widget.setLayout(plot_box)