Форум сайта python.su
> Делаю вроде все так же, как нахожу в уроках в интернете.
Что это за уроки на которых плохому учат?
Офлайн
py.user.nextСпасибо, с этим правда протупила.
Очень много пришлось править, в основном быдлокодерского, типа len(k), где k - целое число.
RodegastДа разное, что-то со статьи на хабре брала, что-то просто находила. Что можете посоветовать для нормального изучения, кроме документации?)
Что это за уроки на которых плохому учат?
Отредактировано caille (Янв. 6, 2016 18:48:10)
Офлайн
И последний, надеюсь, вопрос. Переделала вывод графика. Почему он не строится?
#mmv_ui.py # -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'mmv.ui' # # Created by: PyQt4 UI code generator 4.11.4 # # WARNING! All changes made in this file will be lost! from matplotlib.figure import Figure from PyQt4 import QtCore, QtGui from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 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_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName(_fromUtf8("MainWindow")) MainWindow.resize(747, 492) self.centralwidget = QtGui.QWidget(MainWindow) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) self.lamda = QtGui.QLineEdit(self.centralwidget) self.lamda.setGeometry(QtCore.QRect(90, 20, 31, 20)) self.lamda.setObjectName(_fromUtf8("lamda")) self.miu = QtGui.QLineEdit(self.centralwidget) self.miu.setGeometry(QtCore.QRect(90, 50, 31, 20)) self.miu.setObjectName(_fromUtf8("miu")) self.v = QtGui.QLineEdit(self.centralwidget) self.v.setGeometry(QtCore.QRect(90, 80, 31, 20)) self.v.setObjectName(_fromUtf8("v")) self.llabl = QtGui.QLabel(self.centralwidget) self.llabl.setGeometry(QtCore.QRect(30, 20, 41, 20)) self.llabl.setObjectName(_fromUtf8("llabl")) self.mlabl = QtGui.QLabel(self.centralwidget) self.mlabl.setGeometry(QtCore.QRect(30, 50, 21, 16)) self.mlabl.setObjectName(_fromUtf8("mlabl")) self.vlabl = QtGui.QLabel(self.centralwidget) self.vlabl.setGeometry(QtCore.QRect(30, 80, 47, 13)) self.vlabl.setObjectName(_fromUtf8("vlabl")) self.klabl = QtGui.QLabel(self.centralwidget) self.klabl.setGeometry(QtCore.QRect(30, 110, 47, 13)) self.klabl.setObjectName(_fromUtf8("klabl")) self.k = QtGui.QLineEdit(self.centralwidget) self.k.setGeometry(QtCore.QRect(90, 110, 31, 20)) self.k.setObjectName(_fromUtf8("k")) self.tableWidget = QtGui.QTableWidget(self.centralwidget) self.tableWidget.setGeometry(QtCore.QRect(140, 20, 201, 421)) self.tableWidget.setObjectName(_fromUtf8("tableWidget")) self.tableWidget.setColumnCount(2) self.tableWidget.setRowCount(0) item = QtGui.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(0, item) item = QtGui.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(1, item) self.tableWidget.horizontalHeader().setDefaultSectionSize(100) self.show_table = QtGui.QPushButton(self.centralwidget) self.show_table.setGeometry(QtCore.QRect(20, 140, 75, 23)) self.show_table.setObjectName(_fromUtf8("show_table")) self.show_plot = QtGui.QPushButton(self.centralwidget) self.show_plot.setGeometry(QtCore.QRect(20, 170, 75, 23)) self.show_plot.setObjectName(_fromUtf8("show_plot")) self.ptlabl = QtGui.QLabel(self.centralwidget) self.ptlabl.setGeometry(QtCore.QRect(400, 20, 41, 20)) self.ptlabl.setObjectName(_fromUtf8("ptlabl")) self.jlabl = QtGui.QLabel(self.centralwidget) self.jlabl.setGeometry(QtCore.QRect(530, 20, 41, 20)) self.jlabl.setObjectName(_fromUtf8("jlabl")) self.glabl = QtGui.QLabel(self.centralwidget) self.glabl.setGeometry(QtCore.QRect(660, 20, 41, 20)) self.glabl.setObjectName(_fromUtf8("glabl")) self.Pt = QtGui.QLineEdit(self.centralwidget) self.Pt.setEnabled(False) self.Pt.setGeometry(QtCore.QRect(360, 50, 113, 20)) self.Pt.setObjectName(_fromUtf8("Pt")) self.jave = QtGui.QLineEdit(self.centralwidget) self.jave.setEnabled(False) self.jave.setGeometry(QtCore.QRect(490, 50, 113, 20)) self.jave.setObjectName(_fromUtf8("jave")) self.gave = QtGui.QLineEdit(self.centralwidget) self.gave.setEnabled(False) self.gave.setGeometry(QtCore.QRect(620, 50, 113, 20)) self.gave.setObjectName(_fromUtf8("gave")) #добавила это: self.verticalLayoutWidget = QtGui.QWidget(self.centralwidget) self.verticalLayoutWidget.setGeometry(QtCore.QRect(360, 80, 371, 361)) self.verticalLayoutWidget.setObjectName(_fromUtf8("verticalLayoutWidget")) self.can = QtGui.QVBoxLayout(self.verticalLayoutWidget) self.can.setObjectName(_fromUtf8("can")) self.figure = Figure() self.axes = self.figure.add_subplot( 111 ) self.canvas = FigureCanvas( self.figure ) self.can.addWidget(self.canvas) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtGui.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 747, 21)) self.menubar.setObjectName(_fromUtf8("menubar")) MainWindow.setMenuBar(self.menubar) self.statusbar = QtGui.QStatusBar(MainWindow) self.statusbar.setObjectName(_fromUtf8("statusbar")) MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None)) self.llabl.setText(_translate("MainWindow", "lambda", None)) self.mlabl.setText(_translate("MainWindow", "miu", None)) self.vlabl.setText(_translate("MainWindow", "v", None)) self.klabl.setText(_translate("MainWindow", "k", None)) item = self.tableWidget.horizontalHeaderItem(0) item.setText(_translate("MainWindow", "K", None)) item = self.tableWidget.horizontalHeaderItem(1) item.setText(_translate("MainWindow", "Pk", None)) self.show_table.setText(_translate("MainWindow", "Show table", None)) self.show_plot.setText(_translate("MainWindow", "Show plot", None)) self.ptlabl.setText(_translate("MainWindow", "Pt", None)) self.jlabl.setText(_translate("MainWindow", "j", None)) self.glabl.setText(_translate("MainWindow", "gamma", None))
import mmv from PyQt4.QtCore import SIGNAL from mmv_ui import Ui_MainWindow from PyQt4.QtGui import QMainWindow, QTableWidgetItem #import numpy as np #from matplotlib.figure import Figure #from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas #import unittest.mock #FigureCanvas = unittest.mock.MagicMock() class MyWindow(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): QMainWindow.__init__(self) self.setupUi(self) Ui_MainWindow.__init__(self) self._connectSlots() def _connectSlots(self): self.connect(self.show_table,SIGNAL("clicked()"),self._slotTableClicked) self.connect(self.show_plot,SIGNAL("clicked()"),self._slotPlotClicked) def _slotTableClicked(self): print('table clicked', self.lamda.text()) l = int(self.lamda.text()) m = int(self.miu.text()) v = int(self.v.text()) k = int(self.k.text()) i3_list = mmv.make_i3_list(k) w_list = mmv.make_w_list(l, m, v, k) jave = str(round(mmv.j(v, l, m),10)) gave = str(round(mmv.gamma(l, m, v),10)) pt = str(round(mmv.pt(l, m, v),10)) self.jave.setText(jave) self.gave.setText(gave) self.Pt.setText(pt) table = self.tableWidget table.setRowCount(k) for t in range (k): item = QTableWidgetItem() item.setText(str(i3_list[t])) table.setItem(t, 0, item) for j in range (k): item = QTableWidgetItem() item.setText(str(w_list[j])) table.setItem(j, 1, item) def _slotPlotClicked(self): print('PLOT clicked', self.lamda.text()) l = int(self.lamda.text()) m = int(self.miu.text()) v = int(self.v.text()) k = int(self.k.text()) i_list = mmv.make_i_list(v) i3_list = mmv.make_i3_list(k) pk_list = mmv.make_pk_list(l, m, v) w_list = mmv.make_w_list(l, m, v, k) jave = str(round(mmv.j(v, l, m),10)) gave = str(round(mmv.gamma(l, m, v),10)) pt = str(round(mmv.pt(l, m, v),10)) self.jave.setText(jave) self.gave.setText(gave) self.Pt.setText(pt) self.axes.clear() self.axes.plot(i3_list, w_list, i_list, pk_list) self.axes.set_xbound(lower=0, upper=i3_list.max()) self.axes.set_ybound(lower=0, upper=1.1) self.axes.set_xlabel("k") self.axes.set_ylabel("Pk") self.axes.grid(True) self.axes.legend() self.canvas.draw()
Офлайн
> Переделала вывод графика. Почему он не строится?
Потому что self.axes не определён. Вынеси класс class Qt4MplCanvas(FigureCanvas) из метода slotPlotClicked, а в конструкторе создай его экземпляр.
P.S. Если нет времени вникать в PyQt то стоит посмотреть на библиотеки guidata и guiqwt
https://pythonhosted.org/guidata/examples.html
https://pythonhosted.org/guiqwt/examples.html
Офлайн
Rodegastself.axes = self.figure.add_subplot( 111 )
Потому что self.axes не определён.
Офлайн
cailleВ тот файл руками ничего нельзя вставлять. Там же сверху написано. Это генерится в среде каждый раз заново. Всё, что вставишь вручную, будет стёрто.
а это не было определением?
Офлайн
> а это не было определением?
См. последний вариант.
Офлайн
py.user.nextно если я комментирую вставленные в mmv_ui строчки, исчезает даже сетка.
В тот файл руками ничего нельзя вставлять. Там же сверху написано. Это генерится в среде каждый раз заново. Всё, что вставишь вручную, будет стёрто.
def _slotPlotClicked(self): print('PLOT clicked', self.lamda.text()) l = int(self.lamda.text()) m = int(self.miu.text()) v = int(self.v.text()) k = int(self.k.text()) i_list = mmv.make_i_list(v) i3_list = mmv.make_i3_list(k) pk_list = mmv.make_pk_list(l, m, v) w_list = mmv.make_w_list(l, m, v, k) jave = str(round(mmv.j(v, l, m),10)) gave = str(round(mmv.gamma(l, m, v),10)) pt = str(round(mmv.pt(l, m, v),10)) self.jave.setText(jave) self.gave.setText(gave) self.Pt.setText(pt) self.mpl = Qt4MplCanvas() self.mpl.axes.plot(i3_list, w_list, i_list, pk_list) self.mpl.axes.set_xbound(lower=0, upper=i3_list.max()) self.mpl.show() class Qt4MplCanvas(FigureCanvas): def __init__(self): self.figure = Figure() self.axes = self.figure.add_subplot( 111 ) self.canvas = FigureCanvas( self.figure ) self.can.addWidget(self.canvas) self.axes.clear() self.axes.set_ybound(lower=0, upper=1.1) self.axes.set_xlabel("k") self.axes.set_ylabel("Pk") self.axes.grid(True) self.axes.legend() FigureCanvas.__init__(self,self.fig)
Отредактировано caille (Янв. 7, 2016 18:22:51)
Офлайн
Нет. нужно сделать как-то так:
class Qt4MplCanvas(FigureCanvas): def __init__(self, parent=None): self.fig=Figure(parent) self.axes=self.fig.add_subplot() def setup(self, x, x2, y, y2): self.axes.plot(self.x, self.y, self.x2, self.y2) class MyWindow(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): QMainWindow.__init__(self) self.setupUi(self) self.plot = Qt4MplCanvas(self.centralwidget) self.connect(self.show_table,SIGNAL("clicked()"),self._slotTableClicked) self.connect(self.show_plot,SIGNAL("clicked()"),self._slotPlotClicked) .... def _slotPlotClicked(self): ... self.plot.setup(x, x2, y, y2) ...
Офлайн
Rodegastговорит, лишний аргумент передается.
self.plot = Qt4MplCanvas(self.centralwidget)
Rodegastа здесь, что не знает, что такое parent
self.fig=Figure(parent)
Офлайн