Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 6, 2016 18:24:39

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2706
Репутация: +  182  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, с GUI.

> Делаю вроде все так же, как нахожу в уроках в интернете.

Что это за уроки на которых плохому учат?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#2 Янв. 6, 2016 18:43:47

caille
Зарегистрирован: 2016-01-02
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, с GUI.

py.user.next
Очень много пришлось править, в основном быдлокодерского, типа len(k), где k - целое число.
Спасибо, с этим правда протупила.
Rodegast
Что это за уроки на которых плохому учат?
Да разное, что-то со статьи на хабре брала, что-то просто находила. Что можете посоветовать для нормального изучения, кроме документации?)
Хотя скорее это не там плохому учат, а я все не так делаю)

Отредактировано caille (Янв. 6, 2016 18:48:10)

Офлайн

#3 Янв. 7, 2016 12:53:54

caille
Зарегистрирован: 2016-01-02
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, с GUI.

И последний, надеюсь, вопрос. Переделала вывод графика. Почему он не строится?

#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()

Офлайн

#4 Янв. 7, 2016 13:49:24

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2706
Репутация: +  182  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, с GUI.

> Переделала вывод графика. Почему он не строится?

Потому что self.axes не определён. Вынеси класс class Qt4MplCanvas(FigureCanvas) из метода slotPlotClicked, а в конструкторе создай его экземпляр.

P.S. Если нет времени вникать в PyQt то стоит посмотреть на библиотеки guidata и guiqwt
https://pythonhosted.org/guidata/examples.html
https://pythonhosted.org/guiqwt/examples.html



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Янв. 7, 2016 15:05:51

caille
Зарегистрирован: 2016-01-02
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, с GUI.

Rodegast
Потому что self.axes не определён.
self.axes = self.figure.add_subplot( 111 )
а это не было определением?

Офлайн

#6 Янв. 7, 2016 15:23:05

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9749
Репутация: +  843  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, с GUI.

caille
а это не было определением?
В тот файл руками ничего нельзя вставлять. Там же сверху написано. Это генерится в среде каждый раз заново. Всё, что вставишь вручную, будет стёрто.



Офлайн

#7 Янв. 7, 2016 15:27:10

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2706
Репутация: +  182  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, с GUI.

> а это не было определением?

См. последний вариант.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#8 Янв. 7, 2016 18:02:28

caille
Зарегистрирован: 2016-01-02
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, с GUI.

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)

Офлайн

#9 Янв. 7, 2016 22:00:03

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2706
Репутация: +  182  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, с GUI.

Нет. нужно сделать как-то так:

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)
        ...



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#10 Янв. 8, 2016 00:05:08

caille
Зарегистрирован: 2016-01-02
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите, пожалуйста, с GUI.

Rodegast
self.plot = Qt4MplCanvas(self.centralwidget)
говорит, лишний аргумент передается.
__init__() takes 1 positional argument but 2 were given
если self.centralwidget убрать, то не строится.

Rodegast
self.fig=Figure(parent)
а здесь, что не знает, что такое parent

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version