Пример кода на документе kivy продолжает выдавать TypeError - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь использовать код на веб-сайте Kivy для изучения Texture. Однако следующий код на веб-сайте kivy имеет проблему с типом:

texture = Texture.create(size=(64, 64))

size = 64 * 64 * 3
buf = [int(x * 255 / size) for x in range(size)]

buf = b''.join(map(chr, buf))    # This is the code with a problem

texture.blit_buffer(buf, colorfmt='rgb', bufferfmt='ubyte')
with self.canvas:
    Rectangle(texture=texture, pos=self.pos, size=(64, 64))

Поскольку b''.join() принимает только bytes-like object, а не str, а chr возвращает str, я получил эту ошибку: TypeError: sequence item 0: expected a bytes-like object, str found Я использую Python 3.7 и Kivy 1.11.1. Я что-то здесь упускаю? Я скопировал точный код на этой странице: https://kivy.org/doc/stable/api-kivy.graphics.texture.html

1 Ответ

0 голосов
/ 16 марта 2020

Вот версия этого примера, которая работает с python3:

    # create a 64x64 texture, defaults to rgba / ubyte
    texture = Texture.create(size=(64, 64))

    # create 64x64 rgb tab, and fill with values from 0 to 255
    # we'll have a gradient from black to white
    size = 64 * 64 * 3
    buf = bytes([int(x * 255 / size) for x in range(size)])

    # then blit the buffer
    texture.blit_buffer(buf, colorfmt='rgb', bufferfmt='ubyte')

    # that's all ! you can use it in your graphics now :)
    # if self is a widget, you can do this
    with self.canvas:
        Rectangle(texture=texture, pos=self.pos, size=(64, 64))

Возможно, об этом примере следует сообщить разработчикам Kivy.

...