Sie können eine relative_size und relative_position Methode machen. Und machen Sie sie relativ zur Fensterbreite oder -höhe. Sie erhalten die Größe des Fensters aus der Window-Klasse. Denken Sie daran, nur die Objektgröße (w, h) relativ zu nur einer der Breite oder Höhe zu machen. Oder Ihre Objekte werden verzogen.
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()
Die Relative_Position Methode wird jetzt ein Percentage sein. Sie gehen also von 0-100 in beide Richtungen. Wenn Sie etwas anderes wollen, ändern Sie die 100s in dieser Methode. Versuchen Sie, die #Window.size = (200,100)
auskommentieren und spielen mit der Fenstergröße und sehen, wie es funktioniert. Sie können auch ein Ereignis erstellen, wenn Ihre Anwendung die Größe ändert, z. B. wenn das Telefon die Ausrichtung ändert. Da ich das nicht gemacht habe, funktioniert das nur für die Größe, mit der die Anwendung gestartet wurde.