Найти - Пользователи
Полная версия: Как исправить ошибки?
Начало » Python для новичков » Как исправить ошибки?
1 2 3
Mars30
Доброго времени суток! Я только начала писать на питоне, поэтому пока плохо разбираюсь.
Подскажите, что я написала неправильно в коде?
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), потому что нашла в инете это решение на англоязычном форуме
valentjedi
Mars30
В общем, super(QtGui.QWidget,self) - это вызов конструктора родительского класса QtGui.QWidget. В питоне приходится в наследуемом классе вызывать конструкторы родительских, потому что сам питон этого не сделает, ведь метод __init__() мы переопределили, верно? По-другому можно было бы написать QtGui.QWidget.__init__(self) вроде.
Насчет label: наверное, его надо сначала объявить, прежде чем в цикле заполнять, если я правильно думаю.
Mars30
valentjedi я не совсем понимаю по поводу объявления label, в питоне же не требуется специальное объявление? и если объявлять, то тогда как? я просто пока еле-еле разбираюсь во всем
valentjedi
Mars30
К сожалению, для моего Python 3.4 пока нет PyQt, так что точно не скажу. Но по-моему, к label нельзя обращаться как label. Может, попробовать без , либо еще до цикла написать что-нибудь вроде self.label = QtGui.QLabel()
FishHook
Mars30
питоне же не требуется специальное объявление? и если объявлять, то тогда как?
Не совсем верно. В питоне и других языках тип переменной определяется в момент присваивания автоматически. То есть вполне нормально
a = 1
a = count()
интерпретатор понимает, что переменной а присвоено некое значение, но когда Вы пытаетесь сделать так
a[1] = 7
то возникает недоразумение, ибо операция присвоения значения по индексу, возможна, когда объект имеющий такую возможность уже создан. Вы думаете только списки в питоне могут использовать такой синтаксис? Вовсе нет, а пока мы не знает, что такое а, как его воспринимать, как список, как словарь, как пользовательский объект?
Если а - это список, то операция
a = []
a[1] = 7
даст один результат, а если словарь
a = {}
a[1] = 7
совсем другой. Не может интерпретатор за Вас решить, что же должно получиться, сначала переменную нужно объявить, чтобы она приобрела тип и все атрибуты этого типа.

Mars30
я попробовала сделать список, но у меня теперь вообще все зависает(
valentjedi
Сделать список, это то есть self.label = , что ли? Так точно не нужно. Попробуйте self.label = QtGui.QLabel()
FishHook
Mars30
я попробовала сделать список, но у меня теперь вообще все зависает(
ну зачем Вы беретесь за относительно сложную программу, с ГУИ, если не понимаете основ?
Думаете получится сразу писать что-то полезное?
Неа. Читайте учебник, выполняйте упражнения и все получится, потом.
Mars30
FishHook потому что у меня нет возможности написать то, что мне нужно на другом языке. Это курсовая, мне ее надо доделывать срочно, а учебник я и так читаю
Mars30
valentjedi
Сделать список, это то есть self.label = , что ли? Так точно не нужно. Попробуйте self.label = QtGui.QLabel()
попробовала это вариант, также возникает ошибка, но теперь другая QLabel object does not support item assigment. Суть ошибки этой мне ясна, но толку-то, проблему это не решает
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB