TypeError: неподдерживаемые типы операндов

Это программа, которую я пишу, которая должна отображать текст в окне...

import pyglet
from pyglet import window
from pyglet.text.layout import TextLayout

class Window(pyglet.window.Window):
    def __init__(self):
        super(Window, self).__init__(width = 800, height = 600,
                                 caption = "Prototype")

        self.disclaimer = pyglet.text.Label("Hello World",
                                   font_name = 'Times New Roman',
                                   font_size=36,
                                   color = (255, 255, 255, 255),
                                   x = TextLayout.width / 2,
                                   y = TextLayout.height / 2,
                                   anchor_x='center', anchor_y='center')

def on_draw(self):
    self.clear()
    self.disclaimer.draw()

if __name__ == '__main__':
    window = Window()
    pyglet.app.run()

... однако каждый раз, когда я пытаюсь запустить его, я получаю эту ошибку

line 16
x = TextLayout.width / 2,
TypeError: unsupported operand type(s) for /: 'property' and 'int'

Я почти уверен, что это означает, что я пытался разделить строку, но в документации Pyglet говорится, что ширина и высота - это целые числа. Я понятия не имею, что я делаю неправильно.


person Amorack    schedule 27.06.2010    source источник


Ответы (2)


TextLayout — это класс, так что TextLayout.width — необработанное свойство, довольно бесполезное для вас; вы хотите получить width из экземпляра класса TextLayout, а не из самого класса! Более того, класс специально используется для размещения текстовых документов, поэтому я действительно не понимаю, почему вы вообще хотите его получить (поскольку у вас нет объекта документа).

Я подозреваю, что на самом деле вы хотите:

                               x = self.width / 2,
                               y = self.height / 2,

и удалите импорт и все упоминания о TextLayout.

person Alex Martelli    schedule 27.06.2010
comment
Слей это. Ты опередил меня на 30 секунд. - person jcao219; 27.06.2010
comment
Спасибо, кажется, у меня проблемы с инстансами, но теперь я понял. - person Amorack; 27.06.2010

Если вы используете Python версии 3.x, оператор деления / приводит к числу с плавающей запятой. Используйте //, чтобы получить усеченное (традиционный стиль) целочисленное деление.

person Don O'Donnell    schedule 27.06.2010
comment
Это не Python 3, и использование // дает ту же ошибку, спасибо за попытку. - person Amorack; 27.06.2010