Ошибка при расширении класса 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_())
