Форум сайта python.su
0
Ни разу еще не пользовался супер классами.
Попытался создать супер класс бара Qt. Теоритически, он должен был унаследовать атрибуты QProgressBar, после чего, отображен в главном окне, но что-то пошло не так.
Объясните, в чем проблема и как реализовать задумку?
Ошибка
Traceback (most recent call last): File "E:\Desktop\instruments\tools.py", line 20, in <module> test = Test() File "E:\Desktop\instruments\tools.py", line 14, in __init__ self.bar = Bar(100,100,100,200,150) File "E:\Desktop\instruments\tools.py", line 6, in __init__ self.setRange(value_min,value_max) RuntimeError: super-class __init__() of %S was never called
from PyQt4.QtGui import * from PyQt4.QtCore import * import sys app = QApplication(sys.argv) class Bar(QProgressBar): def __init__(self, xmax, ymax, value_min, value_max, value, text_visible=False): #self.resize(xmax,ymax) self.setRange(value_min,value_max) self.setTextVisible(text_visible) self.setValue(value) class Test(QWidget): def __init__(self, parent=None): QWidget.__init__(self, parent) self.resize(100,200) self.bar = Bar(100,100,100,200,150) self.layout = QVBoxLayout(self) self.layout.addWidget(self.bar) if __name__ == '__main__': test = Test() test.show() sys.exit(app.exec_())
Офлайн
221
Guljaca
def __init__(self, xmax, ymax, value_min, value_max, value, text_visible=False):
super(Bar, self).__init__() # Вероятно это вам нужно
self.setRange(value_min,value_max)
self.setTextVisible(text_visible)
Офлайн
0
Спасибо. Еще хорошо бы описать эту строчку. Что она делает?
Офлайн
221
Guljaca
И тут на на помощь приходит и официальная документация по super(), так и Google, например по запросу “Python super” первая же ссылка доступно объясняет по русски зачем это нужно.
Офлайн