2010-06-27 4 views
3

Ce programme j'écrit est censé afficher un texte dans une fenêtre ...TypeError: type d'opérande non pris en charge (s)

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() 

... Mais chaque fois que je tente de l'exécuter, je obtenir cette erreur

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

Je suis assez sûr que cela signifie que j'ai essayé de diviser une chaîne, mais dans la documentation Pyglet il est dit que la largeur et la hauteur sont ints. Je n'ai aucune idée de ce que je fais de mal.

Répondre

3

TextLayout est une classe - donc TextLayout.width est une propriété première, assez inutile de vous; vous voulez obtenir width à partir d'un instance de la classe TextLayout, pas de la classe elle-même! De plus, la classe est spécifiquement utilisée pour mettre en page des documents texte, donc je ne vois pas vraiment pourquoi vous voudriez l'obtenir du tout (puisque vous n'avez aucun objet document autour).

Je pense que ce que vous voulez réellement est:

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

et enlever l'importation de et toutes les mentions, TextLayout.

+0

Dites-le. Tu m'as battu de 30 secondes. – jcao219

+0

Merci, je semble avoir des problèmes avec les instances, mais je pense que je comprends maintenant. – Amorack

+0

@Amorack, de rien! –

0

Si vous utilisez Python version 3.x, l'opérateur de division / génère un nombre de type float. Utilisez // pour obtenir une division entière tronquée (style traditionnel).

+0

Ce n'est pas python 3 et l'utilisation de // donne la même erreur, merci d'essayer. – Amorack

Questions connexes