缺少 1 个必需的位置参数:'self' in kivy

missing 1 required positional argument: 'self' in kivy

我无法从 bon() 函数 运行 suite() 函数,当我尝试这样做时,它 returns 这个错误 missing 1 required positional argument: 'self'

(

我想是因为我调用函数错误,但我尝试了其他方法,每次都出现这个错误,在我的程序中,我无法在 class 屏幕中移动 bon() 函数经理,请问怎么办?

这是我的代码:

import kivy
from kivy.app import App
from kivy.clock import Clock
from kivy.uix.button import Button
from kivy.core.window import Window
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty, BooleanProperty, NumericProperty
kivy.uix.screenmanager.FadeTransition

kv = """

#: import NoTransition kivy.uix.screenmanager.NoTransition     
#:import Clock kivy.clock.Clock
#: import FadeTransition kivy.uix.screenmanager.FadeTransition
#: import RiseInTransition kivy.uix.screenmanager.RiseInTransition
#: import CardTransition kivy.uix.screenmanager.CardTransition

MyScreenManager:
    transition: RiseInTransition()
    Question1:
        name: "question1"
    Question2:
        name: "question2"


<Question1>:

    label_wid : ratio

    FloatLayout:

        Button:
            text: "+1"
            pos: 270, 300
            size_hint: .30, .10
            background_color: 0,1,0,0.75
            on_press:
                root.mauvais()
        Button:
            text: "following"
            pos: 270, 240
            size_hint: .30, .10
            background_color: 0,1,0,0.75
            on_press: 
                Clock.schedule_once(root.manager.suite, 0.75)

        Label:
            id: ratio
            text: root.manager.theText
            pos: 280,270
            font_size: 17
            color: 0,0,1,0.65

<Question2>:
"""


class MyScreenManager(ScreenManager):
    theText = StringProperty('')
    m = BooleanProperty(True)
    u = BooleanProperty(True)
    t = NumericProperty(0)

    def suite(root,text,self):
        self.m=True
        root.current = "question2"


class Question1(Screen):

    def mauvais(self):
        if  self.manager.m==True:
            self.manager.t += 1
            self.manager.theText = str(self.manager.t)
            self.manager.m=False

    def bon(self, root):
        if self.manager.u==True:
            self.manager.t = "bon"
            self.manager.theText = str(self.manager.t)
            self.manager.u=False    
            Clock.schedule_once(root.manager.suite, 0.75)  

    pass


class Question2(Screen):
    pass


class Quizz(App):
    def build(self):
        self.title = 'Quizz'
        Window.clearcolor = (0, 1, 1, 0.25)

        return Builder.load_string(kv)


if __name__ == '__main__':
    Quizz().run()

您需要在 suite 函数中先放入 self 然后 root 并删除 text 参数。您还需要删除行 root.current = "question2" 行,因为 MyScreenManager class 中没有 current 属性。所以,suite() 应该如下所示:

    def suite(self, root):
        self.m=True
        #root.current = "question2"