Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 2, 2016 02:23:42

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

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

Добрый вечер! Стоит такая задача: сделать программу с графическим интерфейсом для расчета некоторых значений модели M/M/1. Требуется вывести значения (это пока не трогала), график вероятностей Pk и соответствующую таблицу. Решила писать на Python, но ранее программы с интерфейсом на нем не делала, то, что есть, сделала исходя из обрывков кодов, которые находила в сети.
Собственно, проблема такая: при нажатии на кнопки не происходит ничего. Не могу разобраться, то ли они не ловят сигналы и не выполняется вообще ничего, то ли не передаются значения с line_edit, то ли ошибка в чем-то другом. Прилагаю весь имеющийся код. Буду рада, если вы поможете и укажете на другие ошибки, если они есть.

#main.py
import sys
import qt
from PyQt4 import QtGui
if __name__ == '__main__':
  qApp=QtGui.QApplication(sys.argv)
  mw=qt.MyWindow()
  mw.show()
  sys.exit(qApp.exec_())

#mmv.py
def error(l, v, m):
    if l/(v*m)>1:
        print("Система неустойчива, пожалуйста, введите другие значения.")
def ro (l, m):
    return l/m
def fact(x):
    i=1
    fact=1
    while i<=x:
        fact*=i
        i+=1
    return fact
def gamma(l, m, v):
    return 1/(v-ro(l, m))
    
def j(ro, v, l, m):
    return gamma(ro(l, m), v, l)*l
    
def pk(l, m, v, k):
    if k>v:
        j=k-v
        chisl=(ro(l, m)**v/fact(v))*((ro(l, m)/v)**j)
        x=0
        znam=0
        while x<=(v-1):
            znam+=(ro(l, m)**x/fact(x))+((ro(l, m)**v*v)/fact(v)*(v-ro(l, m)))
            x+=1
        return chisl/znam
    chisl=ro**k/fact(k)
    x=0
    znam=0
    while x<=(v-1):
        znam+=(ro(l, m)**x/fact(x))+((ro(l, m)**v*v)/fact(v)*(v-ro(l, m)))
        x+=1
    return chisl/znam
  
def pt(l, m, v):
    chisl=(ro(l, m)**v/fact(v))*(v/(v-ro(l, m)))
    x=0
    znam=0
    while x<=(v-1):
        znam+=(ro(l, m)**x/fact(x))+((ro(l, m)**v*v)/fact(v)*(v-ro(l, m)))
        x+=1
    return chisl/znam
    
def lists(v, k, l, m):
    i_list=[i for i in range (v)]
    i2_list=[i+v for i in range (k-v)]
    i3_list=[i for i in range (k)]
    pk_list=[pk(l, m, v, i) for i in range (v)]
    w_list=[pk(l, m, v, i) for i in range (v)]
    i=0
    while i<(k-v):
        w_list.append(pk(l, m, v, v+i))
        i+=1
    return i_list, i2_list, i3_list, pk_list, w_list

#mmv_ui.py
from PyQt4 import QtCore, QtGui
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(246, 424)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.lamda = QtGui.QLineEdit(self.centralwidget)
        self.lamda.setGeometry(QtCore.QRect(90, 20, 113, 20))
        self.lamda.setObjectName(_fromUtf8("lamda"))
        self.miu = QtGui.QLineEdit(self.centralwidget)
        self.miu.setGeometry(QtCore.QRect(90, 50, 113, 20))
        self.miu.setObjectName(_fromUtf8("miu"))
        self.v = QtGui.QLineEdit(self.centralwidget)
        self.v.setGeometry(QtCore.QRect(90, 80, 113, 20))
        self.v.setObjectName(_fromUtf8("v"))
        self.label = QtGui.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(30, 20, 41, 20))
        self.label.setObjectName(_fromUtf8("label"))
        self.label_2 = QtGui.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(30, 50, 21, 16))
        self.label_2.setObjectName(_fromUtf8("label_2"))
        self.label_3 = QtGui.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(30, 80, 47, 13))
        self.label_3.setObjectName(_fromUtf8("label_3"))
        self.label_4 = QtGui.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(30, 110, 47, 13))
        self.label_4.setObjectName(_fromUtf8("label_4"))
        self.k = QtGui.QLineEdit(self.centralwidget)
        self.k.setGeometry(QtCore.QRect(90, 110, 113, 20))
        self.k.setObjectName(_fromUtf8("k"))
        self.tableWidget = QtGui.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(20, 180, 201, 192))
        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.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(140, 140, 75, 23))
        self.show_plot.setObjectName(_fromUtf8("show_plot"))
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 246, 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.label.setText(_translate("MainWindow", "lambda", None))
        self.label_2.setText(_translate("MainWindow", "miu", None))
        self.label_3.setText(_translate("MainWindow", "v", None))
        self.label_4.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))
#qt.py
import sys
import mmv
from PyQt4 import QtGui
from PyQt4.QtCore import SIGNAL
from mmv_ui import Ui_MainWindow
from PyQt4.QtGui import QMainWindow
#import numpy as np
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
class MyWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self)
        self.setupUi(self)
        
class wind(Ui_MainWindow):
    def __init__(self, parent):
        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):
        def fill_table(self):
            table = self.tableWidget()
            l = int(self.lamda.text())
            m = int(self.miu.text())
            v = int(self.v.text())
            k = int(self.k.text())
            print(l, m, v, k)
            mmv.error(l, v, m)
            #mmv.lists(v, k, l, m)
            i3_list=[i for i in range (k)]
            w_list=[mmv.pk(l, m, v, i) for i in range (v)]
            i=0
            while i<(k-v):
                w_list.append(mmv.pk(l, m, v, v+i))
                i+=1
            table.setRowCount(len(k))            
            for i in range (len(k)):
                table.setItem(i, 0, i3_list[i])
            for j in range (len(k)):
                table.setItem(j, 1, w_list[j])          
        
            
    def _slotPlotClicked(self):
        l = int(self.lamda.text())
        m = int(self.miu.text())
        v = int(self.v.text())
        k = int(self.k.text())
        mmv.error(l, v, m)
        mmv.lists(v, k, l, m)            
        class Qt4MplCanvas(FigureCanvas):
            def __init__(self):
                self.fig=Figure()
                self.axes=self.fig.add_subplot(111)
                self.x=mmv.i3_list
                self.x2=mmv.i_list
                self.y=mmv.w_list
                self.y2=mmv.pk_list
                self.axes.plot(self.x, self.y, self.x2, self.y2)
         
                FigureCanvas.__init__(self,self.fig)
        qApp=QtGui.QApplication(sys.argv)
        mpl=Qt4MplCanvas()
        mpl.show()
        qApp.exec_()
        sys.exit(qApp.exec_())

Офлайн

#2 Янв. 2, 2016 04:15:42

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

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

caille
Не могу разобраться, то ли они не ловят сигналы и не выполняется вообще ничего, то ли не передаются значения с line_edit, то ли ошибка в чем-то другом.

qt.py поправил, поля выводятся.
#!/usr/bin/env python3
 
import sys
import mmv
from PyQt4 import QtGui
from PyQt4.QtCore import SIGNAL
from mmv_ui import Ui_MainWindow
from PyQt4.QtGui import QMainWindow
#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)
 
# class wind(Ui_MainWindow):
#     def __init__(self, parent):
        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())
        def fill_table(self):
            table = self.tableWidget()
            l = int(self.lamda.text())
            m = int(self.miu.text())
            v = int(self.v.text())
            k = int(self.k.text())
            print(l, m, v, k)
            mmv.error(l, v, m)
            #mmv.lists(v, k, l, m)
            i3_list=[i for i in range (k)]
            w_list=[mmv.pk(l, m, v, i) for i in range (v)]
            i=0
            while i<(k-v):
                w_list.append(mmv.pk(l, m, v, v+i))
                i+=1
            table.setRowCount(len(k))
            for i in range (len(k)):
                table.setItem(i, 0, i3_list[i])
            for j in range (len(k)):
                table.setItem(j, 1, w_list[j])
 
 
    def _slotPlotClicked(self):
        print('slot clicked', self.lamda.text())
        l = int(self.lamda.text())
        m = int(self.miu.text())
        v = int(self.v.text())
        k = int(self.k.text())
        mmv.error(l, v, m)
        mmv.lists(v, k, l, m)
        class Qt4MplCanvas(FigureCanvas):
            def __init__(self):
                self.fig=Figure()
                self.axes=self.fig.add_subplot(111)
                self.x=mmv.i3_list
                self.x2=mmv.i_list
                self.y=mmv.w_list
                self.y2=mmv.pk_list
                self.axes.plot(self.x, self.y, self.x2, self.y2)
 
                FigureCanvas.__init__(self,self.fig)
#        qApp=QtGui.QApplication(sys.argv)
        mpl=Qt4MplCanvas()
        mpl.show()
#        qApp.exec_()
#        sys.exit(qApp.exec_())

caille
Буду рада, если вы поможете и укажете на другие ошибки, если они есть.
Сначала надо сделать консольную программу, убедиться, что она работает правильно, а потом заниматься графикой.
В PyQt есть два пути разработки - вручную и через среду. Вручную разрабатывать проще и чище, но медленнее. Через среду можно разрабатывать быстрее, но получается такой вот говнокод из обрывков. Поэтому ошибки здесь искать - просто зря время тратить. То есть нужно либо знать заранее, как всё это сделать (написать десяток рабочих программ), либо выбрать нормальный способ. Сама платформа сделана хорошо, плохо сделаны средства, использующие её.

Например, вот этот способ установки сигнала
self.connect(self.show_table,SIGNAL("clicked()"),self._slotTableClicked)
уже давно устарел, но среда продолжает его ставить.



Отредактировано py.user.next (Янв. 2, 2016 04:23:31)

Офлайн

#3 Янв. 2, 2016 11:41:33

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

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

> Собственно, проблема такая: при нажатии на кнопки не происходит ничего.

if __name__ == '__main__':
  qApp=QtGui.QApplication(sys.argv)
  mw=qt.MyWindow()
  mw.show()
  sys.exit(qApp.exec_())
 
...
 
class MyWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self)
        self.setupUi(self)
        
class wind(Ui_MainWindow):
    def __init__(self, parent):
        Ui_MainWindow.__init__(self)
        self._connectSlots()
       ......
А ничего и не произойдёт. У тебя кнопки не в том окне подключаются.

> Буду рада, если вы поможете и укажете на другие ошибки, если они есть.

Ошибок полно. Такое чувство что ты не вообще не понимаешь что делаешь.



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

Офлайн

#4 Янв. 2, 2016 14:55:33

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

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

py.user.next
Сначала надо сделать консольную программу, убедиться, что она работает правильно, а потом заниматься графикой.
Расчеты все выполнялись, график в консоли выводился.

Rodegast
А ничего и не произойдёт. У тебя кнопки не в том окне подключаются.
А в каком должны, в том, который из формы получился?
Я действительно не совсем понимаю, немного или построчно. А если разбираться в этом с самого начала, не успею к сроку, поэтому обратилась сюда.

Офлайн

#5 Янв. 2, 2016 15:22:32

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

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

caille
Расчеты все выполнялись, график в консоли выводился.
Сомневаюсь. Просто я когда запускал эту хрень, она там ошибку показала, из-за которой ничего не вычисляется.

Кнопочки можешь взять в сообщении выше, я там поправил чисто кнопочки, а остальное не стал трогать.



Офлайн

#6 Янв. 2, 2016 22:15:59

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

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

py.user.next
Сомневаюсь. Просто я когда запускал эту хрень, она там ошибку показала, из-за которой ничего не вычисляется.
Хм, странно. Я меняла немного код после этого, но просто все по функциям засунула (а конкретно - вычисление ро и создание списков), чтобы можно было из другого файла вызывать.
py.user.next
Кнопочки можешь взять в сообщении выше, я там поправил чисто кнопочки, а остальное не стал трогать.
спасибо, буду пока дальше заставить эту фигню на костылях работать)

Отредактировано caille (Янв. 2, 2016 23:37:43)

Офлайн

#7 Янв. 3, 2016 02:06:02

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

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

caille
но просто все по функциям засунула
Вот там строка из функции pk(), которая использует функцию ro(), не вызывая её.
caille
chisl=ro**k/fact(k)



Офлайн

#8 Янв. 3, 2016 02:39:21

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

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

py.user.next
Вот там строка из функции pk(), которая использует функцию ro(), не вызывая её.
да, я уже нашла и исправила
в консоли теперь все считает и выполняет, а в интерфейсе таблицу и график в окне не делает)

Офлайн

#9 Янв. 6, 2016 15:36:08

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 PyQt4 import QtCore, QtGui
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(480, 477)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.lamda = QtGui.QLineEdit(self.centralwidget)
        self.lamda.setGeometry(QtCore.QRect(90, 20, 113, 20))
        self.lamda.setObjectName(_fromUtf8("lamda"))
        self.miu = QtGui.QLineEdit(self.centralwidget)
        self.miu.setGeometry(QtCore.QRect(90, 50, 113, 20))
        self.miu.setObjectName(_fromUtf8("miu"))
        self.v = QtGui.QLineEdit(self.centralwidget)
        self.v.setGeometry(QtCore.QRect(90, 80, 113, 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, 113, 20))
        self.k.setObjectName(_fromUtf8("k"))
        self.tableWidget = QtGui.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(230, 10, 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.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(140, 140, 75, 23))
        self.show_plot.setObjectName(_fromUtf8("show_plot"))
        self.ptlabl = QtGui.QLabel(self.centralwidget)
        self.ptlabl.setGeometry(QtCore.QRect(20, 190, 41, 20))
        self.ptlabl.setObjectName(_fromUtf8("ptlabl"))
        self.jlabl = QtGui.QLabel(self.centralwidget)
        self.jlabl.setGeometry(QtCore.QRect(20, 220, 41, 20))
        self.jlabl.setObjectName(_fromUtf8("jlabl"))
        self.glabl = QtGui.QLabel(self.centralwidget)
        self.glabl.setGeometry(QtCore.QRect(20, 250, 41, 20))
        self.glabl.setObjectName(_fromUtf8("glabl"))
        self.Pt = QtGui.QLineEdit(self.centralwidget)
        self.Pt.setEnabled(False)
        self.Pt.setGeometry(QtCore.QRect(90, 190, 113, 20))
        self.Pt.setObjectName(_fromUtf8("Pt"))
        self.jave = QtGui.QLineEdit(self.centralwidget)
        self.jave.setEnabled(False)
        self.jave.setGeometry(QtCore.QRect(90, 220, 113, 20))
        self.jave.setObjectName(_fromUtf8("jave"))
        self.gave = QtGui.QLineEdit(self.centralwidget)
        self.gave.setEnabled(False)
        self.gave.setGeometry(QtCore.QRect(90, 250, 113, 20))
        self.gave.setObjectName(_fromUtf8("gave"))
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 480, 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))

#qt.py
import mmv
from PyQt4.QtCore import SIGNAL
from mmv_ui import Ui_MainWindow
from PyQt4.QtGui import QMainWindow
#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)
 
# class wind(Ui_MainWindow):
#     def __init__(self, parent):
        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), 5))
        gave = str(round(mmv.gamma(l, m, v), 5))
        pt = str(round(mmv.pt(l, m, v), 5))
        self.jave.setText(jave)
        self.gave.setText(gave)
        self.Pt.setText(pt)
        table = self.tableWidget()
#        def fill_table(self):
        table.setRowCount(len(k))
        for t in range (len(k)):
            table.setItem(t, 0, i3_list[t])
        for j in range (len(k)):
            table.setItem(j, 1, w_list[j])
#        table.fill_table(self)
 
 
    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), 5))
        gave = str(round(mmv.gamma(l, m, v), 5))
        pt = str(round(mmv.pt(l, m, v), 5))
        self.jave.setText(jave)
        self.gave.setText(gave)
        self.Pt.setText(pt)
        class Qt4MplCanvas(FigureCanvas):
            def __init__(self):
                self.fig=Figure()
                self.axes=self.fig.add_subplot()
                self.x=i3_list
                self.x2=i_list
                self.y=w_list
                self.y2=pk_list
                self.axes.plot(self.x, self.y, self.x2, self.y2)
 
            FigureCanvas.__init__(self,self.fig)
        mpl=Qt4MplCanvas()
        mpl.show()

#mmv.py
def error(l, v, m):
    if l/(v*m)>1:
        print("Система неустойчива, пожалуйста, введите другие значения.")
def ro (l, m):
    return l/m
def fact(x):
    i=1
    fact=1
    while i<=x:
        fact*=i
        i+=1
    return fact
def gamma(l, m, v):
    return 1/(v-ro(l, m))
    
def j(v, l, m):
    return gamma(ro(l, m), v, l)*l
    
#print("Вероятность системы в какой момент вы хотите рассчитать?")
#k=int(input())
def pk(l, m, v, k):
    print("0")
    print(k, v)    
    if k>v:
        j=k-v
        print(j)
        chisl=(ro(l, m)**v/fact(v))*((ro(l, m)/v)**j)
        print(chisl)
        x=0
        znam=0
        while x<=(v-1):
            znam+=(ro(l, m)**x/fact(x))+((ro(l, m)**v*v)/fact(v)*(v-ro(l, m)))
            x+=1
            print(znam)
        return chisl/znam
    chisl=ro(l, m)**k/fact(k)
    print(chisl)
    x=0
    znam=0
    while x<=(v-1):
        znam+=(ro(l, m)**x/fact(x))+((ro(l, m)**v*v)/fact(v)*(v-ro(l, m)))
        x+=1
        print(znam)
    return chisl/znam
  
def pt(l, m, v):
    chisl=(ro(l, m)**v/fact(v))*(v/(v-ro(l, m)))
    x=0
    znam=0
    while x<=(v-1):
        znam+=(ro(l, m)**x/fact(x))+((ro(l, m)**v*v)/fact(v)*(v-ro(l, m)))
        x+=1
    return chisl/znam
def make_i_list(v):
    i_list=[i for i in range (v)]
    return i_list
    
def make_i2_list(v, k):
    i2_list=[i+v for i in range (k-v)]
    return i2_list
 
def make_i3_list(k):
    i3_list=[i for i in range (k)]
    return i3_list
    
def make_pk_list(l, m, v):
    pk_list=[pk(l, m, v, i) for i in range (v)]
    print(pk_list)
    return pk_list
    
def make_w_list(l, m, v, k):
    w_list=[pk(l, m, v, i) for i in range (v)]
    i=0
    while i<(k-v):
        w_list.append(pk(l, m, v, v+i))
        i+=1
    return w_list

Офлайн

#10 Янв. 6, 2016 17:03:41

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

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

Тут поправил, чтобы таблицу заполняло.

#!/usr/bin/env python3
 
#qt.py
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)
 
# class wind(Ui_MainWindow):
#     def __init__(self, parent):
        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), 5))
        gave = str(round(mmv.gamma(l, m, v), 5))
        pt = str(round(mmv.pt(l, m, v), 5))
        self.jave.setText(jave)
        self.gave.setText(gave)
        self.Pt.setText(pt)
        table = self.tableWidget #()
#        def fill_table(self):
        table.setRowCount(k)
#        table.setRowCount(len(k))
        for t in range (k):
#        for t in range (len(k)):
            item = QTableWidgetItem()
            item.setText(str(i3_list[t]))
            table.setItem(t, 0, item)
#            table.setItem(t, 0, i3_list[t])
        for j in range (k):
#        for j in range (len(k)):
            item = QTableWidgetItem()
            item.setText(str(w_list[j]))
            table.setItem(j, 1, item)
#            table.setItem(j, 1, w_list[j])
#        table.fill_table(self)
 
 
    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), 5))
        gave = str(round(mmv.gamma(l, m, v), 5))
        pt = str(round(mmv.pt(l, m, v), 5))
        self.jave.setText(jave)
        self.gave.setText(gave)
        self.Pt.setText(pt)
        class Qt4MplCanvas(FigureCanvas):
            def __init__(self):
                self.fig=Figure()
                self.axes=self.fig.add_subplot()
                self.x=i3_list
                self.x2=i_list
                self.y=w_list
                self.y2=pk_list
                self.axes.plot(self.x, self.y, self.x2, self.y2)
 
            FigureCanvas.__init__(self,self.fig)
        mpl=Qt4MplCanvas()
        mpl.show()
Очень много пришлось править, в основном быдлокодерского, типа len(k), где k - целое число.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version