私はGUI devolopmentを初めて使い、Pythonでpyqt5を使ってアプリケーションを開発しようとしています。私は数字といくつかのユーザーウィジェットを表示して、ユーザー入力を通じて数字を更新したいと思う。PyQt5 Matplotlib figure-update with user input
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QSizePolicy, QWidget, QComboBox, QLabel, QRadioButton, QCheckBox, QGridLayout, QLineEdit
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib as mpl
import matplotlib.pyplot as plt
import random
import numpy as np
class App(QWidget):
def __init__(self):
super().__init__()
self.left = 0
self.top = 800
self.title = 'Chip2 Torque Data'
self.width = 800
self.height =800
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
l = QGridLayout(self)
#hbox = MyMplCanvas(self.main_widget, width=50, height=40, dpi=100)
self.figure = plt.figure(figsize=(15,5))
self.canvas = FigureCanvas(self.figure)
l.addWidget(self.canvas, 0,0,9,(100-4))
xselect=QRadioButton("X",self)
xselect.setChecked(True)
zselect=QRadioButton("Z",self)
sselect=QRadioButton("SP1",self)
l.addWidget(xselect,0,(100-1))
l.addWidget(zselect,0,(100-2))
l.addWidget(sselect,0,(100-3))
pass_list=QComboBox(self)
pass_list.addItems(sheets_idealcut)
l.addWidget(pass_list,1,(100-3),1,3)
rawdata_check=QCheckBox("Raw Data",self)
rawdata_check.setChecked(True)
l.addWidget(rawdata_check,2,(100-3),1,3)
mvgavg_check=QCheckBox("Moving average",self)
mvgavg_check.setChecked(True)
mvgstd_check=QCheckBox("Moving stdev",self)
mvgstd_check.setChecked(True)
l.addWidget(mvgavg_check,3,(100-3),1,3)
l.addWidget(mvgstd_check,4,(100-3),1,3)
xlim_left=QLineEdit("None",self)
xlim_right=QLineEdit("None",self)
ylim_top=QLineEdit("None",self)
ylim_top.textChanged.connect(self.plot)
ylim_bottom=QLineEdit("None",self)
ylim_bottom.textChanged.connect(self.plot)
xlim_left_label=QLabel("X min",self)
xlim_right_label=QLabel("X max",self)
ylim_top_label=QLabel("Y max",self)
ylim_bottom_label=QLabel("Y min",self)
l.addWidget(xlim_right_label,5,(100-3),1,1)
l.addWidget(xlim_right,5,(100-2),1,2)
l.addWidget(xlim_left_label,6,(100-3),1,1)
l.addWidget(xlim_left,6,(100-2),1,2)
l.addWidget(ylim_top_label,7,(100-3),1,1)
l.addWidget(ylim_top,7,(100-2),1,2)
l.addWidget(ylim_bottom_label,8,(100-3),1,1)
l.addWidget(ylim_bottom,8,(100-2),1,2)
self.compute_initial_figure()
self.show()
def compute_initial_figure(self):
axes=self.figure.add_subplot(111)
t = np.arange(0.0, 3.0, 0.01)
s = np.sin(2*np.pi*t)
axes.plot(t, s)
self.canvas.draw()
#axes.set_ylim(top=self.ylim_top.text(),bottom=self.ylim_bottom.text())
def plot(self):
plt.cla()
axes=self.figure.add_subplot(111)
t = np.arange(0.0, 3.0, 0.01)
s = np.sin(2*np.pi*t)
axes.plot(t, s)
axes.set_ylim(top=self.ylim_top.text(),bottom=self.ylim_bottom.text())
self.canvas.draw()
if __name__ == '__main__':
sheets_idealcut=['pass2','pass3','pass4','pass5']
app = QApplication(sys.argv)
w = App()
app.exec_()
私はそれがY max
とY min
テキストボックス内のユーザー入力に基づいて、図中のY軸の範囲を変更したい:以下のコードです。以下 が出力されます。
問題がある:私はY max
とY min
テキストボックスの値を変更すると、図が更新されていません。私はQLineEdit.textChanged.connect
関数を使って、テキストボックスを図形更新関数に接続しました。しかし、コードはplot
機能に全く入っていないようです。私はここで間違って何をしていますか?
助けてください。 (1.I使用グリッドレイアウト所望のように、私は、ウィジェットのサイズと位置を調整することができるように。この参照がpyqt4を使用する。私は私のコードを基に使用される参照符号である。)
軸についてのヒントをありがとうございます。それは少し速くなった(私の想像力かもしれない)。限界については、あなたは正しかった。データ型が問題でした。しかし、それは間違いを起こさなかった。 (私はAnaconda4のSpyderで実行しています)。それで、私はここに問題があったことをまず知りませんでした – Kanmani