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 يقول أن العرض والارتفاع هما INTs. ليس لدي أي فكرة عما أفعله خطأ.
المحلول
TextLayout
هو صف دراسي -- لذا TextLayout.width
هي خاصية خام ، عديمة الفائدة جدا لك ؛ تريد الحصول على width
من نموذج التابع TextLayout
الفصل ، وليس من الفصل نفسه! علاوة على ذلك ، يتم استخدام الفصل على وجه التحديد لوضع مستندات نصية ، لذلك لا أرى حقًا سبب رغبتك في الحصول عليه على الإطلاق (نظرًا لأنه ليس لديك كائن مستند).
أظن أن ما تريده في الواقع هو:
x = self.width / 2,
y = self.height / 2,
وإزالة استيراد ، وكل ذكر ، TextLayout
.
نصائح أخرى
إذا كنت تستخدم Python الإصدار 3.x مشغل القسم /
يؤدي إلى رقم نوع تعويم. يستخدم //
للحصول على تقسيم عدد صحيح (النمط التقليدي).