Уведомления

Группа в Telegram: @pythonsu

#1 Май 4, 2014 16:17:51

Mars30
Зарегистрирован: 2014-05-04
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить 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):
        super(QtGui.QWidget,self).__init__()
        i=0
        j=0
        grid=QtGui.QGridLayout()
        for i in (0,param["count_obj_fun"]):
            self.label[i]=QtGui.QLabel("Целевая функция f"+str(i))      
            grid.addWidget(self.label[i],i,0,QtCore.Qt.AlignLeft)
            for j in (0,param["count_var"]):
                self.edx[i]=QtGui.QTextEdit
                grid.addWidget(self.edx[i],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_())
у меня возникают ошибки:
AttributError: ‘MyWindow’ object has no attribute ‘label’
и если убрать строчку super(QtGui.QWidget,self).__init__(), появляется другая ошибка:
RuntimeError: super-class __init__() of type MyWindow was never called , я не знаю что происходит в строке super(QtGui.QWidget,self), потому что нашла в инете это решение на англоязычном форуме

Офлайн

#2 Май 4, 2014 16:41:56

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

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

Mars30
В общем, super(QtGui.QWidget,self) - это вызов конструктора родительского класса QtGui.QWidget. В питоне приходится в наследуемом классе вызывать конструкторы родительских, потому что сам питон этого не сделает, ведь метод __init__() мы переопределили, верно? По-другому можно было бы написать QtGui.QWidget.__init__(self) вроде.
Насчет label: наверное, его надо сначала объявить, прежде чем в цикле заполнять, если я правильно думаю.



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

Офлайн

#3 Май 4, 2014 17:22:08

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

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

valentjedi я не совсем понимаю по поводу объявления label, в питоне же не требуется специальное объявление? и если объявлять, то тогда как? я просто пока еле-еле разбираюсь во всем

Офлайн

#4 Май 4, 2014 17:52:56

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

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

Mars30
К сожалению, для моего Python 3.4 пока нет PyQt, так что точно не скажу. Но по-моему, к label нельзя обращаться как label. Может, попробовать без , либо еще до цикла написать что-нибудь вроде self.label = QtGui.QLabel()



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

Отредактировано valentjedi (Май 4, 2014 17:53:10)

Офлайн

#5 Май 4, 2014 17:55:12

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

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

Mars30
питоне же не требуется специальное объявление? и если объявлять, то тогда как?
Не совсем верно. В питоне и других языках тип переменной определяется в момент присваивания автоматически. То есть вполне нормально
a = 1
a = count()
интерпретатор понимает, что переменной а присвоено некое значение, но когда Вы пытаетесь сделать так
a[1] = 7
то возникает недоразумение, ибо операция присвоения значения по индексу, возможна, когда объект имеющий такую возможность уже создан. Вы думаете только списки в питоне могут использовать такой синтаксис? Вовсе нет, а пока мы не знает, что такое а, как его воспринимать, как список, как словарь, как пользовательский объект?
Если а - это список, то операция
a = []
a[1] = 7
даст один результат, а если словарь
a = {}
a[1] = 7
совсем другой. Не может интерпретатор за Вас решить, что же должно получиться, сначала переменную нужно объявить, чтобы она приобрела тип и все атрибуты этого типа.



Отредактировано FishHook (Май 4, 2014 17:57:24)

Офлайн

#6 Май 4, 2014 17:56:48

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

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

я попробовала сделать список, но у меня теперь вообще все зависает(

Офлайн

#7 Май 4, 2014 17:58:48

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

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

Сделать список, это то есть self.label = , что ли? Так точно не нужно. Попробуйте self.label = QtGui.QLabel()



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

Офлайн

#8 Май 4, 2014 17:59:33

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

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

Mars30
я попробовала сделать список, но у меня теперь вообще все зависает(
ну зачем Вы беретесь за относительно сложную программу, с ГУИ, если не понимаете основ?
Думаете получится сразу писать что-то полезное?
Неа. Читайте учебник, выполняйте упражнения и все получится, потом.



Офлайн

#9 Май 4, 2014 18:05:09

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

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

FishHook потому что у меня нет возможности написать то, что мне нужно на другом языке. Это курсовая, мне ее надо доделывать срочно, а учебник я и так читаю

Офлайн

#10 Май 4, 2014 18:14:45

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

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

valentjedi
Сделать список, это то есть self.label = , что ли? Так точно не нужно. Попробуйте self.label = QtGui.QLabel()
попробовала это вариант, также возникает ошибка, но теперь другая QLabel object does not support item assigment. Суть ошибки этой мне ясна, но толку-то, проблему это не решает

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version