2017-12-19 4 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

draw_circleClock으로 호출하여 레이아웃이 완전히 시작되도록 할 수 있습니다.
그런 다음 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() 
관련 문제