Ошибка при расширении класса QLabel PyQt5

Для расширения свойств класса QLabel из PyQt5 - для форматирования текстового поля, написал код Python 3.9:

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QWidget, QApplication, QLabel)

class Window(QWidget):

    def __init__(self):
        super().__init__()
        self.position_width = 100
        self.position_height = 100
        self.init_gui()

    class TextBox(QLabel):

        def __init__(self, *args, **kwargs):
            super(QLabel).__init__(*args, **kwargs)
            self.setWordWrap(True)
            self.setFont(QFont('Arial', 11))
            self.move(self.left_border, self.top_border_computer)
            self.resize(500, 100)

    def init_gui(self):

        # Game rules
        rules = "Text"

        self.textbox = self.TextBox(rules, self)

        # Window Geometry
        self.setGeometry(500, 300, 600, 300)
        self.setWindowTitle('Name Game')
        self.show()

    
app = QApplication([])
window = Window()
app.exec_()

Ошибка:

Traceback (most recent call last):
  File "C:\....\src\main.py", line 13, in <module>
    window = Window()
  File "C:\....\src\gui.py", line 38, in __init__
    self.init_gui()
  File "C:\....\src\gui.py", line 81, in init_gui
    self.textbox = self.TextBox(rules, self)
  File "C:\....\gui.py", line 56, in __init__
    super(QLabel).__init__(*args, **kwargs)
**TypeError: super() argument 1 must be type, not str**

Ответы (2 шт):

Автор решения: gil9red

Действия:

  • Достаточно просто super().__init__(*args, **kwargs)
  • Добавил импорт QFont
  • Закомментировал self.move(self.left_border, self.top_border_computer), т.к. поля self.left_border и self.top_border_computer не были приведены в вопросе

Пример:

from PyQt5.QtWidgets import QWidget, QApplication, QLabel
from PyQt5.QtGui import QFont


class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.position_width = 100
        self.position_height = 100
        self.init_gui()

    class TextBox(QLabel):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.setWordWrap(True)
            self.setFont(QFont('Arial', 11))
            # self.move(self.left_border, self.top_border_computer)
            self.resize(500, 100)

    def init_gui(self):
        # Game rules
        rules = "Text"

        self.textbox = self.TextBox(rules, self)

        # Window Geometry
        self.setGeometry(500, 300, 600, 300)
        self.setWindowTitle('Name Game')
        self.show()


app = QApplication([])
window = Window()
app.exec_()
→ Ссылка
Автор решения: S. Nick

Не надо загромождать класс основного окна дополнительными классами.

Абсолютное позиционирование не есть хорошая практик, почитайте о менеджерах компоновки.

Как вариант:

from PyQt5.Qt import *


class Label(QLabel):
    def __init__(self, rules, parent=None):
        super(QLabel, self).__init__(parent)
        
        self.setText(rules)
        
        self.setWordWrap(True)
        self.setFont(QFont('Arial', 22))
# ???        self.move(self.left_border, self.top_border_computer)
        self.move(70, 55)
        self.setStyleSheet("background: #7eca9c;")
#        self.resize(500, 100)
        

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.position_width = 100
        self.position_height = 100
        self.init_gui()

    def init_gui(self):
        rules = "Для расширения свойств класса QLabel из PyQt5 "\
            "- для форматирования текстового поля, написал код Python 3.9:"

        self.textbox = Label(rules, self)

        # Window Geometry
        self.setGeometry(500, 300, 600, 300)
        self.setWindowTitle('Name Game')


if __name__ == '__main__':
    import sys
    
    app = QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())    

введите сюда описание изображения

→ Ссылка