尝试将 QLabel 的文本设置为 class 对象的 __repr__ 并出现错误
Trying to set the text of a QLabel as the __repr__ of a class's object and getting an error
我试图根据用户在组合框中选择的内容更改 QLabel 中的文本,我想设置的文本是 class 的 __repr__
函数。这是我用来尝试做我想做的事情的代码:
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Resonant Orbit Calculator")
self.setMinimumSize(QSize(500, 400))
m_label = QLabel()
m_label.setText(object)
c_box = QComboBox()
c_box.addItems(planet.name for planet in planets_objects)
c_box.addItems(moon.name for moon in moons_objects)
c_box.currentTextChanged.connect(self.text_changed)
layout = QVBoxLayout()
layout.addWidget(m_label)
layout.addWidget(c_box)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
def text_changed(self, t):
for element in planets_objects + moons_objects:
if element.name == t:
object = element
break
print(object)
return object
我得到的错误是 TypeError: setText(self, str): argument 1 has unexpected type 'type'
。我有点明白我使用了错误的信息来将 QLabel 设置为,但我不知道该怎么做。
错误很少。
object
在 Python 中是特殊的 object/class,您不应该将它用作变量。
您在 __init__
中使用 setText(object)
但您从未将文本分配给变量 object
您应该在 self.m_label
中使用 self.
才能在其他功能中访问此小部件。
在其他函数中,您必须使用 setText(..)
来更改标签中的文本。您不能通过将新文本分配给变量 object
来更改它
如果您需要 __repr__
的结果,请使用 repr(...)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Resonant Orbit Calculator")
self.setMinimumSize(QSize(500, 400))
self.m_label = QLabel()
self.m_label.setText('Default text on start')
c_box = QComboBox()
c_box.addItems(planet.name for planet in planets_objects)
c_box.addItems(moon.name for moon in moons_objects)
c_box.currentTextChanged.connect(self.text_changed)
layout = QVBoxLayout()
layout.addWidget(m_label)
layout.addWidget(c_box)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
def text_changed(self, selected):
for element in planets_objects + moons_objects:
if element.name == selected:
#self.m_label.setText(element)
self.m_label.setText(repr(element))
break
# OR
#return
顺便说一句:text_changed
由 PyQt
执行,但它不知道如何处理返回值 - 所以使用 return object
是无用的。
我试图根据用户在组合框中选择的内容更改 QLabel 中的文本,我想设置的文本是 class 的 __repr__
函数。这是我用来尝试做我想做的事情的代码:
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Resonant Orbit Calculator")
self.setMinimumSize(QSize(500, 400))
m_label = QLabel()
m_label.setText(object)
c_box = QComboBox()
c_box.addItems(planet.name for planet in planets_objects)
c_box.addItems(moon.name for moon in moons_objects)
c_box.currentTextChanged.connect(self.text_changed)
layout = QVBoxLayout()
layout.addWidget(m_label)
layout.addWidget(c_box)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
def text_changed(self, t):
for element in planets_objects + moons_objects:
if element.name == t:
object = element
break
print(object)
return object
我得到的错误是 TypeError: setText(self, str): argument 1 has unexpected type 'type'
。我有点明白我使用了错误的信息来将 QLabel 设置为,但我不知道该怎么做。
错误很少。
object
在 Python 中是特殊的 object/class,您不应该将它用作变量。您在
__init__
中使用setText(object)
但您从未将文本分配给变量object
您应该在
self.m_label
中使用self.
才能在其他功能中访问此小部件。在其他函数中,您必须使用
来更改它setText(..)
来更改标签中的文本。您不能通过将新文本分配给变量object
如果您需要 __repr__
的结果,请使用 repr(...)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Resonant Orbit Calculator")
self.setMinimumSize(QSize(500, 400))
self.m_label = QLabel()
self.m_label.setText('Default text on start')
c_box = QComboBox()
c_box.addItems(planet.name for planet in planets_objects)
c_box.addItems(moon.name for moon in moons_objects)
c_box.currentTextChanged.connect(self.text_changed)
layout = QVBoxLayout()
layout.addWidget(m_label)
layout.addWidget(c_box)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
def text_changed(self, selected):
for element in planets_objects + moons_objects:
if element.name == selected:
#self.m_label.setText(element)
self.m_label.setText(repr(element))
break
# OR
#return
顺便说一句:text_changed
由 PyQt
执行,但它不知道如何处理返回值 - 所以使用 return object
是无用的。