如何从Python中的另一个类访问另一个类的方法来编辑Kivy对象?
我试图用Python和Kivy做一个乒乓球游戏,但是我不能改变球的位置。无论何时我尝试,球都不会改变,除非我在类中调用我不想做的方法 Python:如何从Python中的另一个类访问另一个类的方法来编辑Kivy对象?,python,kivy,Python,Kivy,我试图用Python和Kivy做一个乒乓球游戏,但是我不能改变球的位置。无论何时我尝试,球都不会改变,除非我在类中调用我不想做的方法 Python: #Imported everything class PongGame(Widget): ball = ObjectProperty() def update(self): self.ball.pos = (1200, 1200) class PongBall(
#Imported everything
class PongGame(Widget):
ball = ObjectProperty()
def update(self):
self.ball.pos = (1200, 1200)
class PongBall(Widget):
pass
class PongApp(App):
def build(self):
PongGame().update() #Doesn't work (doesn't do anything)
print(PongGame().ball.pos)) #Not even printing right coordinates
return PongGame()
if __name__ = "__main__":
PongApp().run()
千伏:
:
球:pball
庞贝尔:
id:pball
位置:(根中心x-(根宽度*0.05),根中心y*(1/12))
尺寸:(根高度*(1/20),根高度*(1/20))
:
画布:
颜色:
rgb:[1,1,1]
椭圆:
pos:self.pos
大小:self.size
1)两个开放式括号,三个闭合式括号:
print(PongGame().ball.pos))
2)=
应更改为=
:
if __name__ = "__main__":
3)这里您创建了3个不同的PongGame
对象(它们将具有不同的状态),而不是创建一个:
PongGame().update() #Doesn't work (doesn't do anything)
print(PongGame().ball.pos)) #Not even printing right coordinates
return PongGame()
应该是:
root = PongGame() # Create one object and change it's state.
root.update()
print(root.ball.pos) # will print 1200, 1200
return root
4)kvlang将widgets属性绑定到它依赖的变量。所以,如果您想在将来更改球的位置,您不应该将其绑定到根
忽略球的位置
。换句话说,
pos: (root.center_x - (root.width * 0.05), root.center_y * (1/12))
是否应该依赖于self.pos
:
pos: self.pos
-)这才是最重要的
我还添加了触球时的on\u touch\u down
handling以显示球的位置变化(只需单击窗口即可移动球):
Builder.load\u字符串(b''
:
球:pball
庞贝尔:
id:pball
pos:self.pos
尺码:20,20
:
画布:
颜色:
rgb:[1,1,1]
椭圆:
pos:self.pos
大小:self.size
''')
类PongGame(小部件):
ball=ObjectProperty()
def更新(自我):
self.ball.pos=(200200)
def on_触控向下(自身,触控):
self.ball.pos=touch.pos#将球的位置更改为点击点
类PongBall(小部件):
通过
PongApp课程(应用程序):
def生成(自):
root=PongGame()
root.update()#初始球位置
返回根
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
PongApp().run()
尝试从def更新(self)中删除self?然后如何访问ball ObjectProperty?我认为运行PongGame()有问题。update()看到了吗
pos: self.pos
Builder.load_string(b'''
<PongGame>:
ball: pball
PongBall:
id: pball
pos: self.pos
size: 20, 20
<PongBall>:
canvas:
Color:
rgb: [1, 1, 1]
Ellipse:
pos: self.pos
size: self.size
''')
class PongGame(Widget):
ball = ObjectProperty()
def update(self):
self.ball.pos = (200, 200)
def on_touch_down(self, touch):
self.ball.pos = touch.pos # change ball position to point of click
class PongBall(Widget):
pass
class PongApp(App):
def build(self):
root = PongGame()
root.update() # init ball position
return root
if __name__ == '__main__':
PongApp().run()