2016-04-27 4 views
1

Я в настоящее время создаю графический интерфейс, где я хочу иметь некоторые слайдеры, некоторые кнопки и некоторые сюжеты. Я изо всех сил пытаюсь позиционировать график 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? Просто не забудьте установить виджет, чтобы иметь максимальный размер(), который составляет примерно четверть вашего размера вашего вида, или добавить другие виджеты и убедиться, что все масштабы пропорционально. –

ответ

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)