[Python] PyQt4, небольшая проблема

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Jerri, 14 May 2015.

  1. Jerri

    Jerri Level 8

    Joined:
    12 Jul 2009
    Messages:
    137
    Likes Received:
    376
    Reputations:
    22
    Первый раз работаю с Qt, ранее писал только консольные приложения. Возникла небольшая проблема, при закрытии формы - выскакивает такое окно:
    [​IMG]
    Code:
    Process finished with exit code -1073741819 (0xC0000005)
    Хотелось бы услышать от знающих людей, по какой причине такое возможно.
    Смог локализовать участок кода, по вине которого происходит подобное, но не понял, почему
    Code:
    progress_bar_box = QtGui.QGroupBox()
    grid_progress_bar = QtGui.QGridLayout()
    self.progress_bar = QtGui.QProgressBar()
    self.progress_bar.hide()
    self.progress_bar_label = QtGui.QLabel(u'Получение списка CMS: ')
    self.progress_bar_label.hide()
    grid_progress_bar.addWidget(self.progress_bar_label, 0, 0)
    grid_progress_bar.addWidget(self.progress_bar, 0, 1)
    progress_bar_box.setLayout(grid_progressBar)
    
     
    #1 Jerri, 14 May 2015
    Last edited: 14 May 2015
  2. i~DOS

    i~DOS Member

    Joined:
    26 Mar 2009
    Messages:
    44
    Likes Received:
    40
    Reputations:
    4
    Мало подробностей. Версию системы, интерпретатора, полный листинг кода, на котором происходит краш в студию.
     
  3. Dev.0x00

    Dev.0x00 Member

    Joined:
    14 May 2015
    Messages:
    13
    Likes Received:
    6
    Reputations:
    0
    Скорей всего происходит удаления в куче объекта который уже был удален или был создан в стеке.
    Что бы следовать объектных иерархий QT, экземпляры наследующие от QObject должны создаваться в куче а не в стеке.
     
    #3 Dev.0x00, 14 May 2015
    Last edited: 14 May 2015
    Jerri likes this.
  4. Jerri

    Jerri Level 8

    Joined:
    12 Jul 2009
    Messages:
    137
    Likes Received:
    376
    Reputations:
    22
    Спасибо за ответы. Методом тыка установил, что проблема заключалась в этой строке:
    Code:
    self.progress_bar_label = QtGui.QLabel(u'Получение списка CMS: ')
    
    Если же переменная не в self, то ошибки нет.
     
  5. Dev.0x00

    Dev.0x00 Member

    Joined:
    14 May 2015
    Messages:
    13
    Likes Received:
    6
    Reputations:
    0
    Я не особо разбираюсь в Python-e и PyQT, но если он транслирует потом код в объекты С++, то вам нужно установить для label parent-а:
    class PySide.QtGui.QLabel(text[, parent=None[, f=0]])
    т.е. подставить self.

    Вот еще по теме - >> Тыц <<.
     
    #5 Dev.0x00, 14 May 2015
    Last edited: 14 May 2015
  6. Семён

    Семён New Member

    Joined:
    9 May 2015
    Messages:
    10
    Likes Received:
    1
    Reputations:
    0
    Может у self нет такого члена?
     
  7. Jerri

    Jerri Level 8

    Joined:
    12 Jul 2009
    Messages:
    137
    Likes Received:
    376
    Reputations:
    22
    Всем спасибо за ответы.
    Собственно, опытным путем решил проблему.
    В деструкторе:
    Code:
    self.progressBar_label.deleteLater()
    del self.progressBar_label
    #progressBar_label - QtGui.QLabel
    
    Тема, наверное, исчерпана.
     
    #7 Jerri, 16 May 2015
    Last edited: 17 May 2015
Loading...