Уведомления

Группа в Telegram: @pythonsu

#1 Май 4, 2014 18:18:17

Mars30
Зарегистрирован: 2014-05-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Как исправить ошибки?

FishHook
Не совсем верно. В питоне и других языках тип переменной определяется в момент присваивания автоматически
это и так понятно

Офлайн

#2 Май 4, 2014 18:33:38

valentjedi
Зарегистрирован: 2014-03-06
Сообщения: 26
Репутация: +  3  -
Профиль   Отправить e-mail  

Как исправить ошибки?

В общем, вот так это запустится:

from PyQt4 import QtCore, QtGui
param={"count_obj_fun":2,"count_var":3,"count_const":4}
class MyWindow(QtGui.QWidget):
    def __init__(self,parent=None):
        global param
        super(QtGui.QWidget,self).__init__()
        i=0
        j=0
        grid=QtGui.QGridLayout()
        self.label = QtGui.QLabel("Целевая функция f")
        self.edx=QtGui.QTextEdit()
        #self.edx = QtGui.QWidget()
        for i in (0,param["count_obj_fun"]):
            self.label.text="Целевая функция f"+str(i)
            grid.addWidget(self.label,i,0,QtCore.Qt.AlignLeft)
            for j in (0,param["count_var"]):
                
                grid.addWidget(self.edx,i,j+1,QtCore.Qt.AlignLeft)
if __name__=="__main__":
    import sys
    app=QtGui.QApplication(sys.argv)
    window=MyWindow()
    window.setWindowTitle("Ввод целевой функции")
    window.resize(30,50)
    window.show()
    sys.exit(app.exec_())
То есть мы объявили label и edx до их использования, и да, они не поддерживают обращение по индексу.
Однако запустится пустое окошко. Или так и должно быть? Вообще, в чем задача-то?



#!/usr/bin/env python
# -*- coding: utf-8 -*-

Офлайн

#3 Май 4, 2014 18:42:25

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как исправить ошибки?

Mars30
это и так понятно
Не всем это понятно, посмотри в свой код на первой странице.
self.label[i]=QtGui.QLabel("Целевая функция f"+str(i))  
ну и где ты определил self.label как список?



Офлайн

#4 Май 4, 2014 18:55:17

Mars30
Зарегистрирован: 2014-05-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Как исправить ошибки?

FishHook
ну и где ты определил self.label как список
я повторно код не кидала в ответы

Офлайн

#5 Май 4, 2014 19:03:20

Mars30
Зарегистрирован: 2014-05-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Как исправить ошибки?

valentjedi
Вообще, в чем задача-то?
Задача состоит в написании программы для решения многокритериальных задач оптимизации, должна поддерживаться интерактивность, т.е. пользователь сам выбирает сколько целевых функций, переменных и ограничений, в зависимости от его выбора меняются последующие формы. Я бы так не парилась с питоном, если бы у него сама математика не решалась в пакете pyBrain. Окошко для ввода общего количества целевых функций, переменных и ограничений я сделала, теперь проблема сделать эту интерактивность, т.е. мне теперь надо добавлять на окно столько label и TextEdit, сколько выбрал пользователь. Сюда я выложила код только второго окна. Словарь param как раз содержит сколько чего выбрал пользователь, но я сделала эти значения пока постоянные

Офлайн

#6 Май 4, 2014 19:04:11

Mars30
Зарегистрирован: 2014-05-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Как исправить ошибки?

FishHook,
я от вас не вижу помощи, только едкие комментарии

Офлайн

#7 Май 4, 2014 19:18:47

Mars30
Зарегистрирован: 2014-05-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Как исправить ошибки?

valentjedi
Однако запустится пустое окошко
да, действительно, пустое окно, но хотя бы что-то, раньше вообще не запускалось)

Офлайн

#8 Май 4, 2014 19:23:31

Mars30
Зарегистрирован: 2014-05-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Как исправить ошибки?

valentjedi
for i in (0,param):
self.label.text=“Целевая функция f”+str(i)
тут тогда получается мы просто у label меняем текст, а новые label не создаются, хотя странно, что не выводится вообще ничего

Офлайн

#9 Май 4, 2014 19:32:50

valentjedi
Зарегистрирован: 2014-03-06
Сообщения: 26
Репутация: +  3  -
Профиль   Отправить e-mail  

Как исправить ошибки?

Mars30
Суть в том, что надо каждый раз создавать новый лейбл и добавлять его в layout. А главное в том, чтобы в Ваше окно установить этот layout. Вот пример для двух лейблов и текст эдитов, в цикл уже загоняйте сами:

from PyQt4 import QtCore, QtGui
param={"count_obj_fun":2,"count_var":3,"count_const":4}
class MyWindow(QtGui.QWidget):
    def __init__(self,parent=None):
        super(QtGui.QWidget,self).__init__()
        self.grid=QtGui.QGridLayout()
        self.grid.addWidget(QtGui.QLabel("label1"))
        self.grid.addWidget(QtGui.QTextEdit())
        self.grid.addWidget(QtGui.QLabel("label2"))
        self.grid.addWidget(QtGui.QTextEdit())
        self.centralWidget = QtGui.QWidget(self)
        self.centralWidget.setLayout(self.grid)
if __name__=="__main__":
    import sys
    app=QtGui.QApplication(sys.argv)
    window=MyWindow()
    window.setWindowTitle("Ввод целевой функции")
    window.show()
    sys.exit(app.exec_())



#!/usr/bin/env python
# -*- coding: utf-8 -*-

Офлайн

#10 Май 4, 2014 19:41:40

Mars30
Зарегистрирован: 2014-05-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Как исправить ошибки?

valentjedi, спасибо большое, тут и мне по силам разобраться и вам пришлось старый питон устанавливать из-за меня, приятно

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version