をオブジェクトを定義することが可能です。そして、窓の幅または高さに関連してそれらを作る。 Windowクラスからウィンドウのサイズを取得します。 オブジェクトのサイズ(幅、高さ)は、幅または高さのいずれか一方にのみ関連してください。またはあなたのオブジェクトは歪められます。
from kivy.uix.widget import Widget
from kivy.graphics import Canvas,InstructionGroup,Color,Ellipse
from kivy.core.window import Window
from kivy.app import App
class MyCanvas(Widget):
def __init__(self,**kwargs):
super(MyCanvas,self).__init__(**kwargs)
#Window.size = (200,100)
self.size = Window.size
self.orientation = "vertical"
self.ball = InstructionGroup()
self.ball_size = self.relative_size(10,10)
self.color = Color(0, 1, 1)
self.ellipse = Ellipse(size=self.ball_size,pos=self.relative_position(100,50,self.ball_size))
self.ball.add(self.color)
self.ball.add(self.ellipse)
self.canvas.add(self.ball)
def relative_position(self,x,y,obj_size=(0,0)): # pass obj_size if you want the position to be the center of the object11
x = (self.width/100.0) * x - obj_size[0]/2.0
y = (self.height/100.0) * y - obj_size[1]/2-.0
return (x,y)
def relative_size(self,w,h):
return (self.width/float(w),self.width/float(h)) # only make it relative to your width or heigh
# or your object will be warped
class MyApp(App):
def build(self):
return MyCanvas()
if __name__ == "__main__":
MyApp().run()
ここで、relative_positionメソッドがpercantageになります。したがって、両方向に0-100から渡します。それ以外のものが必要な場合は、thtメソッドで100を変更します。 #Window.size = (200,100)
のコメントを外して、ウィンドウサイズで再生し、その動作を確認してください。 携帯端末の向きが変わったように、アプリケーションのサイズが変更された場合でもイベントを作成することができます。 私はそれを作っていないので、これはアプリケーションの開始サイズでのみ機能します。