使用Buildozer编译Kivi时出错

问题描述 投票:0回答:1

我正在使用命令“bullldozer android deploy”在 Python Kivy 中编译代码。

Kivy version = 2.2.1
bulldozer version = 1.5.0
Python version = 3.0.2

代码:

from kivy.metrics import dp

from kivy.app import MDApp
from kivymd.uix.datatables import MDDataTable
from kivymd.uix.screen import MDScreen


class Example(MDApp):
    def build(self):
        years = [2017, 2018, 2019, 2020, 2021, 2022, 2023]

        self.data_tables = MDDataTable(
            # use_pagination= True,
            check=True,
            column_data=[("Год", dp(30))],
            row_data= [(str(year),) for year in years],
            sorted_on="Schedule",
            sorted_order="ASC",
            elevation=2)

        self.data_tables.bind(on_check_press=self.on_click_box)
        
        screen = MDScreen()
        screen.add_widget(self.data_tables)
        
        return screen

    def on_click_box(self, instance_table, current_row):
        print(current_row[0])


if __name__ == "__main__":
    app = Example()
    app.run()

请帮助解决问题。文字错误:

Error compiling Cython file:
------------------------------------------------------------
...
    # works only for write.
    cdef SDL_RWops *rwops = SDL_AllocRW()
    rwops.hidden.unknown.data1 = <void *>byteio
    rwops.seek = NULL
    rwops.read = NULL
    rwops.write = &rwops_bytesio_write
                  ^
------------------------------------------------------------

kivy/core/image/_img_sdl2.pyx:35:18: Cannot assign type 'size_t (*)(SDL_RWops *, const void *, size_t, size_t) except? -1' to 'size_t
(*)(SDL_RWops *, void *, size_t, size_t) noexcept'. Значения исключений несовместимы. Предлагаю добавить 'noexcept' к типу 'size_t

(SDL_RWops *, const void *, size_t, size_t) 除外? -1'.

Error compiling Cython file:
------------------------------------------------------------
...
    cdef SDL_RWops *rwops = SDL_AllocRW()
    rwops.hidden.unknown.data1 = <void *>byteio
    rwops.seek = NULL
    rwops.read = NULL
    rwops.write = &rwops_bytesio_write
    rwops.close =&rwops_bytesio_close

我找到了错误所在的文件。这是发生这种情况的代码片段:

cdef SDL_RWops *rwops_bridge_to_bytesio(byteio):
    # works only for write.
    cdef SDL_RWops *rwops = SDL_AllocRW()
    rwops.hidden.unknown.data1 = <void *>byteio
    rwops.seek = NULL
    rwops.read = NULL
    rwops.write = &rwops_bytesio_write
    rwops.close =&rwops_bytesio_close
    return rwops

我做了什么来解决这个问题?添加 noexcept 如错误中所述:

    rwops.write = &rwops_bytesio_write noexcept
    rwops.close =&rwops_bytesio_close noexcept
python kivy cython buildozer
1个回答
0
投票

哪个文件有错误?

顺便说一句,我无法发表评论,所以我不得不问,抱歉

© www.soinside.com 2019 - 2024. All rights reserved.