0

我正在尝试创建最简单的示例,从另一个窗口中的按钮和功能控制一个窗口中的绘图。我知道我需要在绘图窗口中添加更多内容,因此,我需要使用 QT 窗口创建我的绘图图。

这是我到目前为止所拥有的:

我的控制窗口:

import sys
from PyQt4.QtCore import (QSize, SIGNAL)
from PyQt4.QtGui import (QApplication, QDialog, QPushButton, QVBoxLayout)
import PlotWindow

class Window(QDialog):

  def __init__(self, parent=None):
    super(Window, self).__init__(parent)

    self.pushButton1 = QPushButton()
    self.pushButton1.setMaximumSize(QSize(110, 24))
    self.pushButton1.setObjectName("pushButton1")
    self.pushButton1.setText("Open Plot")
    self.pushButton2 = QPushButton()
    self.pushButton2.setMaximumSize(QSize(110, 24))
    self.pushButton2.setObjectName("pushButton2")
    self.pushButton2.setText("Update Plot")
    layout = QVBoxLayout()
    layout.addWidget(self.pushButton1)
    layout.addWidget(self.pushButton2)
    self.setLayout(layout)
    self.setWindowTitle("Plot Control")

    self.connect(self.pushButton1,SIGNAL("clicked()"),self.plotNew)

  def plotNew(self):
    print "new plot window"
    self.dialog = PlotWindow.PlotWindow()
    self.dialog.show()

app = QApplication(sys.argv)
form = Window()
form.open()
app.exec_()

我的绘图窗口:

import matplotlib
import numpy as np
from PyQt4 import QtGui
from matplotlib.lines import Line2D
import matplotlib.pyplot as plt
import matplotlib.animation as animation

class PlotWindow(QtGui.QDialog):
  def __init__(self, parent=None):
    super(PlotWindow, self).__init__(parent)
    self.fig = plt.figure()
    self.ax = self.fig.add_subplot(111)
    plt.draw()

显然,我的绘图窗口是我遇到最大问题的地方。我已经浏览了很多示例,但似乎没有一个显示如何将绘图放置在另一个窗口中。

谢谢

4

1 回答 1

0

好吧,我可以回答我自己的部分问题,但我想评论一下这是否是最好的方法。下面的代码显示了我为调出第二个窗口所做的更改,里面有一个绘图。

import sys
from PyQt4 import QtGui
import numpy as np
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar

class PlotCanvas(FigureCanvas):
  def __init__(self, parent):
    self.fig = Figure()
    self.axes = self.fig.add_subplot(111)
#        self.x = np.arange(0.0,0.3,0.01)
#        self.y = np.cos(2*np.pi*self.x)
#        self.axes.plot(self.x,self.y)
    FigureCanvas.__init__(self, self.fig)
    self.setParent(parent)
 FigureCanvas.setSizePolicy(self,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Expanding)

class PlotWindow(QtGui.QMainWindow):
  def __init__(self):
    QtGui.QMainWindow.__init__(self)
    self.setWindowTitle("Plot Figure")
    self.main_widget = QtGui.QWidget(self)
    vbl = QtGui.QVBoxLayout(self.main_widget)
    qmc = PlotCanvas(self.main_widget)
    ntb = NavigationToolbar(qmc, self.main_widget)
    vbl.addWidget(qmc)
    vbl.addWidget(ntb)
    self.main_widget.setFocus()
    self.setCentralWidget(self.main_widget) 

我仍然需要从另一个窗口设置绘图数据的帮助。谢谢

于 2012-11-09T22:22:36.913 回答