簡體   English   中英

TypeError:method()接受1個位置參數,但給出2個(Python和Kivy)

[英]TypeError: method()takes in 1 positional argument but 2 were given (Python and Kivy)

我試圖在我的py文件中使用函數在一定秒數后更改屏幕,這些是2個屏幕和ScreenManager(盡管不是所有代碼,都將其縮短為重要的位):

class StartScreen(Screen):
    pass

class Buttons(Screen):

    def change_screen(self):
        WindowManager.current = "start_screen"


class WindowManager(ScreenManager):
    pass

kv = Builder.load_file("my.kv")

class MyApp(App):

    def build(self):
        return kv


if __name__ == '__main__':
    Window.fullscreen = "auto"
    MyApp().run()

這是整個kv文件:

#:import NoTransition kivy.uix.screenmanager.NoTransition
#:import Clock kivy.clock.Clock

WindowManager:
    transition: NoTransition()

    StartScreen:
    Buttons:


<StartScreen>:
    name: "start_screen"

    Button:
        background_normal: "maxresdefault.jpg"
        background_down: "maxresdefault.jpg"
        size_hint: 0.3, 0.3
        pos_hint: {"x": .35, "y": .35}
        text: "Play"
        font_size: 250
        on_release:
            app.root.current = "btn_screen"
            root.reset_score()


<Buttons>:
    name: "btn_screen"
    btn: btn
    on_enter:
        Clock.schedule_once(root.change_screen, 5)

    Button:
        background_normal: "pepe11.png"
        background_down: "pepe11.png"
        id: btn
        size_hint: 0.2, 0.3
        pos_hint: {"x": .4, "y": .35}
        on_press:
            root.respawn()

所以我的問題出在進入Buttons屏幕時嘗試調用Clock.schedule_once命令,我一直在獲取“ TypeError:change_screen()接受1個位置參數,但給出2個”。

謝謝大家。

您有2個錯誤:

  1. Clock.schedule_once()將時間間隔作為參數傳遞給回調,因此您必須傳遞一個附加參數。

  2. WindowManager.current無效,因為current不是靜態屬性,因此您必須通過一個對象訪問它,在Screen情況下,您可以訪問通過manager屬性管理它的ScreenManager

因此解決方案是:

# ...
class Buttons(Screen):
    def change_screen(self, dt):
        self.manager.current = "start_screen"
# ...

Clock使用dt參數(增量時間)作為回調函數。
您必須像這樣更改功能:

def change_screen(self, dt):
    WindowManager.current = "start_screen"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM