pouvez faire une méthode relative_size et relative_position. Et faites-les par rapport à la largeur ou la hauteur des fenêtres. Vous obtenez la taille de la fenêtre de la classe Window. Rappelez-vous seulement de faire la taille des objets (w, h) par rapport à seulement un de largeur ou de hauteur. Ou vos objets seront déformés.
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()
La méthode relative_position va maintenant être un avantage. Donc vous passez de 0 à 100 dans les deux sens. Si vous voulez quelque chose d'autre, changez les 100 dans la méthode. Essayez de décommenter le #Window.size = (200,100)
et jouer avec la taille de la fenêtre, et voir comment cela fonctionne. Vous pouvez également créer un événement si votre application change de taille, par exemple si votre téléphone change d'orientation. Comme je ne l'ai pas fait, cela ne fonctionnera qu'avec la taille de l'application.