سؤال

هذا برنامج أكتبه من المفترض أن يعرض بعض النص في نافذة ...

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 يقول أن العرض والارتفاع هما INTs. ليس لدي أي فكرة عما أفعله خطأ.

هل كانت مفيدة؟

المحلول

TextLayout هو صف دراسي -- لذا TextLayout.width هي خاصية خام ، عديمة الفائدة جدا لك ؛ تريد الحصول على width من نموذج التابع TextLayout الفصل ، وليس من الفصل نفسه! علاوة على ذلك ، يتم استخدام الفصل على وجه التحديد لوضع مستندات نصية ، لذلك لا أرى حقًا سبب رغبتك في الحصول عليه على الإطلاق (نظرًا لأنه ليس لديك كائن مستند).

أظن أن ما تريده في الواقع هو:

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

وإزالة استيراد ، وكل ذكر ، TextLayout.

نصائح أخرى

إذا كنت تستخدم Python الإصدار 3.x مشغل القسم / يؤدي إلى رقم نوع تعويم. يستخدم // للحصول على تقسيم عدد صحيح (النمط التقليدي).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top