2013-04-24 37 views
7

Tôi đã tạo một tập lệnh python đơn giản khi chạy sẽ hiển thị biểu đồ matplotlib được nhúng bên trong cửa sổ PyQT. Tôi đã sử dụng hướng dẫn this để nhúng và chạy biểu đồ. Ngoài một số khác biệt trong các quy ước đặt tên và trong giao diện người dùng chung, biểu đồ của tôi được tạo chính xác như một trong hướng dẫn đã đề cập. Vấn đề của tôi là tôi muốn làm cho một đồ thị tương tác cho phép phóng to và kéo, nhưng tôi muốn làm điều này chỉ với con chuột (nhấp và kéo, cuộn bánh xe, vv) và không có thanh công cụ (như tôi thấy nó xấu xí).Đồ thị tương tác Matplotlib được nhúng trong PyQt

Widget Class:

class MplCanvas(FigureCanvas): 
    """ 
    Creates a canvas on which to draw our widgets 
    """ 
    def __init__(self): 
     self.fig = Figure() 
     self.ax = self.fig.add_subplot(111) 

     FigureCanvas.__init__(self, self.fig) 
     FigureCanvas.setSizePolicy(self, QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Expanding) 
     FigureCanvas.updateGeometry(self) 

class marketdephWidget(QtGui.QWidget): 
    """ 
    The market deph graph 
    """ 
    def __init__(self, parent = None): 
     QtGui.QWidget.__init__(self, parent) 
     self.canvas = MplCanvas() 
     self.vbl = QtGui.QVBoxLayout() 
     self.vbl.addWidget(self.canvas) 
     self.setLayout(self.vbl) 

Vẽ chức năng (chạy trên nút bấm):

# initialize the mplwidgets 
def PlotFunc(self): 
    randomNumbers = random.sample(range(0, 10), 10) 
    self.ui.widget.canvas.ax.clear() 
    self.ui.widget.canvas.ax.plot(randomNumbers) 
    self.ui.widget.canvas.draw() 

Trả lời

2

Nó được một lúc nhưng tôi đã làm việc trên một vấn đề tương tự. Tôi có một số example here. Có thể điều này sẽ giúp.

Chương trình đang sử dụng PySide, không phải là vấn đề.

Để chạy chương trình

python pyStocker.py 

Bạn sẽ thấy một widget popup và ở phía trên bên trái bạn sẽ thấy một hộp TextEdit. Chỉ cần nhập GOOG hoặc một số biểu tượng cổ phiếu hợp lệ khác và nhấn enter. Biểu đồ sẽ điền dữ liệu của cổ phiếu. Thanh trượt ở phía dưới thay đổi đồ thị thời gian thực.