2015-10-26 3 views
1

Я хочу показать экземпляр Line2D в Qt4 Widget. Но когда я запускаю код, он просто показывает пустую цифру.Как показать Line2D в Qt4 Widget

Вот мой код.

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.lines import Line2D 

class Qt4MplCanvas(FigureCanvas): 
    """Class to represent the FigureCanvas widget""" 
    def __init__(self, parent): 
     # plot definition 
     self.fig = Figure() 
     self.axes = self.fig.add_subplot(111) 

     x = [1,1] 
     y=[2,2] 
     self.line = Line2D(x, y, marker = 'o', markerfacecolor = 'r', animated = True) 
     self.axes.add_line(self.line) 
     self.axes.set_xlim((0,3)) 
     self.axes.set_ylim((0,3)) 



     # initialization of the canvas 
     FigureCanvas.__init__(self, self.fig) 
     # set the parent widget 
     self.setParent(parent) 

     # we define the widget as expandable 
     FigureCanvas.setSizePolicy(self, 
           QtGui.QSizePolicy.Expanding, 
           QtGui.QSizePolicy.Expanding) 
     # notify the system of updated policy 
     FigureCanvas.updateGeometry(self) 

class ApplicationWindow(QtGui.QMainWindow): 
    """Example main window""" 
    def __init__(self): 
     # initialization of Qt MainWindow widget 
     QtGui.QMainWindow.__init__(self) 
     # set window title 
     self.setWindowTitle("Matplotlib Figure in a Qt4 Window With NavigationToolbar") 

     # instantiate a widget, it will be the main one 
     self.main_widget = QtGui.QWidget(self) 

     # create a vertical box layout widget 
     vbl = QtGui.QVBoxLayout(self.main_widget) 
     # instantiate our Matplotlib canvas widget 
     qmc = Qt4MplCanvas(self.main_widget) 
     # instantiate the navigation toolbar 
     vbl.addWidget(qmc) 
     # set the focus on the main widget 
     self.main_widget.setFocus() 
     # set the central widget of MainWindow to main_widget 
     self.setCentralWidget(self.main_widget) 


# create the GUI application 
qApp = QtGui.QApplication(sys.argv) 
# instantiate the ApplicationWindow widget 
aw = ApplicationWindow() 
# show the widget 
aw.show() 
# start the Qt main loop execution, exiting from this script 
# with the same return code of Qt application 
sys.exit(qApp.exec_()) 

В моем коде есть два класса. класс Qt4MplCanvas используется для рисования фигуры Line2D. class ApplicationWindow должен написать окно и добавить на него виджет.

ответ

0

Похоже, проблема заключается в линии (но, к сожалению, я не знаю, почему ...):

self.line = Line2D(x, y, marker = 'o', markerfacecolor = 'r', animated = True) 

Я видел сюжет по стирая animated = True. Это изменило линию на:

self.line = Line2D(x, y, marker = 'o', markerfacecolor = 'r') 

Это отобразило точку с координатами (1,2).

Я не знаю, должен ли участок со временем меняться, но, возможно, этот example поможет вам в этом.

+0

Большое спасибо за чтение моего кода. Я был озадачен проблемой в течение нескольких дней, пока вы не помогли мне. Но я до сих пор не знаю, что значит анимировать. Приведенный выше пример - это тот, который я научился писать свой код. Теперь я думаю, что проблема заключается в том, как использовать Line2D. Но мало документов и примеров можно найти. –

 Смежные вопросы

  • Нет связанных вопросов^_^