Чтобы изменить размер Widgets
, проще всего использовать size_hint
вместо size
. Тогда Kivy
отрегулирует размеры вещей для вас. Кроме того, чтобы получить фоновое изображение, вы можете использовать Rectangle
и предоставить изображение как source
. Вот модификация вашего кода с использованием идей, которые я упомянул:
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder
Builder.load_string('''
<style>:
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: "round.png"
BoxLayout:
orientation: "vertical"
pos_hint: {'center_x': 0.5, 'top':1.0}
size_hint: 0.25, 0.25
Button:
text:"Start Game"
Button:
text:"Exit"
Button:
text:"About"
''')
class style(FloatLayout):
pass
class MyApp(App):
def build(self):
return style()
if __name__=="__main__" :
MyApp().run()
Использование BoxLayout
делает большую работу за вас. Он упорядочивает ваш Buttons
в вертикальный стек (в вашем случае) и назначает им размеры для заполнения BoxLayout
. Так что, в основном, вам нужно беспокоиться только о размере BoxLayout
, и пусть он обрабатывает его детей. В приведенном выше коде я установил size_hint
на 0.25, 0.25
, но вы можете установить его на все, что выглядит хорошо. И тогда BoxLayout
устанавливается с pos_hint
на {'center_x': 0.5, 'top':1.0}
. Это расположит его в центре дисплея по горизонтали и в верхней части дисплея. Опять же, вы устанавливаете его на то, что хотите.
Обратите внимание, что на Buttons
нет size_hints
или sizes
. Это потому, что BoxLayout
будет обрабатывать их.
Вы установили font_size
в 100
для Buttons
, что мне кажется довольно большим, поэтому я просто использовал значение по умолчанию font_size
, которое15sp
(sp
означает, что размер масштабируется для используемого устройства). К сожалению, size_hint
для font_size
не существует, поэтому при масштабировании Buttons
текст останется неизменным.
Основная идея заключается в том, чтобы по возможности использовать подсказки (вместо установки фактических размеров ипозиции), так что Kivy
может сделать работу за вас.