Python Kivy:chow获取布局中心的坐标

Python Kivy:chow获取布局中心的坐标,python,kivy,Python,Kivy,我想在布局的中心画一个圆。根据我的知识,我只获得了此项的默认值。为什么显示的代码中的圆圈不是红色?你能给我解释一下获得必要坐标的过程吗 import kivy from kivy.config import Config kivy.config.Config.set('graphics','resizable', False) from kivy.app import App from kivy.graphics import Color, Ellipse from kivy.uix.wi

我想在布局的中心画一个圆。根据我的知识,我只获得了此项的默认值。为什么显示的代码中的圆圈不是红色?你能给我解释一下获得必要坐标的过程吗

import kivy
from kivy.config import Config
kivy.config.Config.set('graphics','resizable', False)


from kivy.app import App
from kivy.graphics import Color, Ellipse

from kivy.uix.widget import Widget
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button



class Scene(FloatLayout):
    def __init__(self, **kwargs):
        super(Scene, self).__init__(**kwargs)

    def draw_circle(self):
        with self.canvas:
            Color=(1,0,0)
            circ = Ellipse(pos = (self.center_x, self.center_y), size=(20,20))

    def on_touch_down(self, touch):    
        pass

class Game(BoxLayout):
    def __init__ (self,**kwargs):
        super(Game, self).__init__(**kwargs)
        self.orientation = 'vertical'

        but1 = Button(text = 'button 1')
        self.add_widget(but1)

        self.scene =  Scene()
        self.add_widget(self.scene)


class TestApp(App):
    def build(self):
        game = Game()
        game.scene.draw_circle()

        return game

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

创建浮动布局时,应定义其大小

self.scene =  Scene(size=(300, 300))
然后,圆应该位于
FloatLayout
尺寸的中心


我还认为
FloatLayout
最好与
size\u-hint
pos\u-hint
一起使用,而不是固定坐标。

您可以使用
Clock
调用
draw\u-circle
,以确保首先完全启动布局。
然后确保像这样创建颜色
颜色(1,0,0)
。不
Color=()

from kivy.config import Config
Config.set('graphics','resizable', False)    
from kivy.app import App
from kivy.graphics import Color, Ellipse
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.clock import Clock


class Scene(FloatLayout):

    def draw_circle(self, dt):
        with self.canvas:
            Color(1,0,0)
            circ = Ellipse(pos = (self.center_x, self.center_y), size=(20,20))


class Game(BoxLayout):

    def __init__ (self,**kwargs):
        super(Game, self).__init__(**kwargs)
        self.orientation = 'vertical'

        but1 = Button(text = 'button 1')
        self.add_widget(but1)

        self.scene =  Scene()
        self.add_widget(self.scene)


class TestApp(App):
    def build(self):
        game = Game()
        Clock.schedule_once(game.scene.draw_circle) # call draw_circle on next frame

        return game

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