2017-12-19 20 views
1

FloatLayoutの中心に円を描画したいと思います。私の知識で私はこれのデフォルト値しか得ていませんでした。なぜコードが赤ではないことを示していますか?必要な座標を取得するためのプロセスを教えてください。Kivy:FloatLayoutセンターの座標を取得するためのチャット

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() 

答えて

1

フロートレイアウトの作成時に、フロートレイアウトのサイズを定義する必要があります。

self.scene = Scene(size=(300, 300)) 

あなたのサークルはFloatLayoutの中心にある必要があります。

また、固定座標の代わりにをsize_hintpos_hintと併用すると良いと思います。

0

あなたはレイアウトが完全に最初に開始されていることを確認するためにClockdraw_circleを呼び出すことができます。
次に、Color(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() 
関連する問題