2017-08-24 10 views
0

QTインターフェイスを作成しようとしています。私はqtとPythonにはかなり新しいです。 QTクリエーターを使ってmatplotlibウィジェット(python(x、y))とスライダーを作ったので、スライダーの値で変更したいと思います。 私が見つけた別の解決策を試しましたが(例:here)、うまくいきませんでした。 誰かが私が間違っていることを私に説明できますか? は、ここに私のコードです:リフレッシュMatplotlibWidget with slidebar

from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
from numpy import * 
import os,sys 
os.chdir('C:\\somepath') 

from testgraph import * 

class graph(QWidget):  
    def __init__(self, parent=None):   
     QWidget.__init__(self)   
     self.ui=Ui_Form()   
     self.ui.setupUi(parent)   
     #Ici, personnalisez vos widgets si nécessaire   
     #Réalisez les connexions supplémentaires entre signaux et slots 
     self.ui.horizontalSlider.setRange(10, 100) 
     self.ui.horizontalSlider.valueChanged.connect(self.plotgraph) 
     self.fig = self.ui.mplwidget.axes 
     self.fig.set_xlim(1,100) 
     self.fig.set_ylabel('plof') 
     self.fig.set_xlabel('plif') 
     self.fig.set_ylim(-1,1) 
     x = arange(1,100) 
     self.line = self.fig.plot(x,sin(x*pi/10)) 
     #self.ui.mplwidget.show() 

    def plotgraph(self):   
     T1=self.ui.horizontalSlider.value() 
     print(str(T1)) 

     self.fig.clear() #clear the previous plot 
     self.fig.plot(x,sin(x*pi/T1)) 
     self.ui.mplwidget.figure.canvas.draw() #redraw the canvas 

     #self.ui.mplwidget.figure.canvas.draw() 
     #self.ui.mplwidget.figure.canvas.update() 
     #self.line.set_ydata(sin(x*pi/T1)) 
     #self.fig.plot(x,) 

     #self.fig.canvas.update() 
#   



def main(args):  
    a=QApplication(args)  
    f=QWidget()  
    c=graph(f)  
    f.show()  
    r=a.exec_()  
    return r 

if __name__=="__main__":  
    main(sys.argv)#include <QApplication> 

、ここqtdesignerからtestgraphです:

# -*- coding: utf-8 -*- 

# Form implementation generated from reading ui file 'testgraph.ui' 
# 
# Created: Thu Aug 24 16:56:29 2017 
#  by: PyQt4 UI code generator 4.11.3 
# 
# WARNING! All changes made in this file will be lost! 

from PyQt4 import QtCore, QtGui 
from matplotlibwidget import MatplotlibWidget 
try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

class Ui_Form(object): 
    def setupUi(self, Form): 
     Form.setObjectName(_fromUtf8("Form")) 
     Form.resize(1181, 837) 
     self.verticalLayout = QtGui.QVBoxLayout(Form) 
     self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) 
     self.mplwidget = MatplotlibWidget(Form) 
     self.mplwidget.setObjectName(_fromUtf8("mplwidget")) 
     self.verticalLayout.addWidget(self.mplwidget) 
     self.horizontalSlider = QtGui.QSlider(Form) 
     self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal) 
     self.horizontalSlider.setObjectName(_fromUtf8("horizontalSlider")) 
     self.verticalLayout.addWidget(self.horizontalSlider) 

     self.retranslateUi(Form) 
     QtCore.QMetaObject.connectSlotsByName(Form) 

    def retranslateUi(self, Form): 
     Form.setWindowTitle(_translate("Form", "Form", None)) 

スライダーの値が印刷されたが、私が試したオプションのどれもが私のプロットをリフレッシュするために働いていません。私はここで立ち往生している。

+1

xを定義し、常にエラーのトレースバックを含めることを忘れないでください。 – ImportanceOfBeingErnest

+0

ありがとうございます。私はエラーがない、それは動作しません:それはスライダの値を印刷しますが、プロットをリフレッシュしません – denis

答えて

0

私はxが定義されていないので、あなたがライン

self.fig.plot(x,sin(x*pi/T1)) 

でエラーが出ますね。

どちらかxクラス変数self.x = arange(1,100) を作成し、後で

self.fig.plot(self.x,sin(self.x*pi/T1)) 

またはコードの問題について報告するときは更新関数の内部

x = arange(1,100) 
self.fig.plot(x,sin(x*pi/T1)) 
+0

ヒントのおかげで。私はそれを試みます、私はそれが動作することを願っています。しかしそれは意味をなさない。 – denis

+0

が役に立った、助けてくれてありがとう! – denis

関連する問題