Kivy – aplicación base tiene alineación extraña

Estoy tratando de construir una aplicación básica de Kivy. Después de agregar los elementos básicos y ejecutar la aplicación, todos los elementos se encuentran en la esquina inferior izquierda. Se muestra así en Android y Linux.

Main.py:

from kivy.app import App from kivy.uix.widget import Widget class SublimeLauncher(Widget): pass class SublimeLauncherApp(App): def build(self): return SublimeLauncher() if __name__ == "__main__": SublimeLauncherApp().run() 

sublimelauncher.kv:

 #:kivy 1.2.0 : FloatLayout: BoxLayout: orientation: 'vertical' spacing: 10 Label: text: "Enter the path to the folder to open.\nPress OK if you would like to open without a directory" TextInput: id: folderpath Button: text: 'OK' 

Primero lo probé solo con el BoxLayout, pero leí en alguna parte que el widget raíz siempre es tan grande como la aplicación. ¿Cómo declaro el tamaño de la aplicación? O el diseño? ¿Cómo harías para hacer algo como un cuadro de diálogo?

Tal vez me esté perdiendo algo muy básico, pero parece que no puedo resolverlo.

Edit: esto es lo que estoy viendo ..

introduzca la descripción de la imagen aquí

Como su widget raíz no es un diseño (usted hizo que SublimeLauncher heredara el Widget ), no establece su tamaño / posición de hijos. Así que su FloatLayout tiene los valores predeterminados, ya que tampoco los anula manualmente.

 pos: 0, 0 size: 100, 100 

Y estos valores predeterminados, por supuesto, restringen al niño, ya que FloatLayout restringe su tamaño en función de su propiedad size_hint.

Quieres darles más espacio, como señaló Nykakin.

Además, como su texto es más grande que la Etiqueta (tampoco ha establecido halign y text_size), su textura se centra en el centro de la Etiqueta, por lo que parte de ella está fuera de la pantalla. Quieres echar un vistazo a kivy / examples / widgets / textalign.py

Su diseño tiene un tamaño predeterminado de 100×100 píxeles. Puedes intentar colorearlo para ver cuánto espacio ocupa:

 from kivy.app import App from kivy.uix.widget import Widget from kivy.lang import Builder kv = ''' : BoxLayout: canvas: Color: rgb: 1, 0, 0 Rectangle: size: self.size orientation: 'vertical' spacing: 10 Label: text: "Enter the path to the folder to open.\\nPress OK if you would like to open without a directory" TextInput: id: folderpath Button: text: 'OK' ''' Builder.load_string(kv) class SublimeLauncher(Widget): pass class SublimeLauncherApp(App): def build(self): return SublimeLauncher() if __name__ == "__main__": SublimeLauncherApp().run() 

Configuración de tamaño no predeterminado:

 kv = ''' : BoxLayout: size: 250, 250 canvas: Color: rgb: 1, 0, 0 Rectangle: size: self.size orientation: 'vertical' spacing: 10 Label: text: "Enter the path to the folder to open.\\nPress OK if you would like to open without a directory" TextInput: id: folderpath Button: text: 'OK' ''' Builder.load_string(kv) 

Tomando espacio completo:

 kv = ''' : BoxLayout: size: root.size canvas: Color: rgb: 1, 0, 0 Rectangle: size: self.size orientation: 'vertical' spacing: 10 Label: text: "Enter the path to the folder to open. \\nPress OK if you would like to open without a directory" TextInput: id: folderpath Button: text: 'OK' ''' Builder.load_string(kv) 

Recientemente escribí una publicación de un pequeño truco que utilizo cuando estoy progtwigndo interfaces. El truco te permitirá ver un borde alrededor de todos los widgets (diseños incluidos) que agregas a la pantalla. Este sería el resultado para su código:

introduzca la descripción de la imagen aquí

Aprovecha la herencia y las reglas de Kivy para sobrescribir la clase base de todos los widgets. Solo tienes que añadir:

 : canvas.after: Line: rectangle: self.x+1,self.y+1,self.width-1,self.height-1 

al comienzo de este archivo:

 : FloatLayout: BoxLayout: orientation: 'vertical' spacing: 10 Label: text: "Enter the path to the folder to open.\nPress OK if you would like to open without a directory" TextInput: id: folderpath Button: text: 'OK'