缺少 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"
我无法从 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"