Создайте меню запуска игры с помощью Python KIVY - PullRequest
0 голосов
/ 29 октября 2019

Я хочу создать игровое меню с изменяемыми размерами, которое может быть совместимо с python и kivy. Я создал кнопку на экране, и когда я изменяю ее размер, кнопка не изменяется, только размер экрана изменяется.

Кнопка не отображается. Я хочу создать графический интерфейс, в котором есть фоновое изображение и кнопка создается на изображении, и экран должен быть изменяемого размера.

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.image import Image
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.graphics import BorderImage
from kivy.metrics import dp
from kivy.lang import Builder

Builder.load_string('''
<style>:
    canvas.before:
    BorderImage:
        pos: self.pos
        size: self.size
        source: "round.png"
        BoxLayout:
            orientation: "vertical"
            size: self.size
            Button:
                text:"Start Game"
                font_size: 100
                size: 100,50
                pos: 360,1024 
            Button:
                text:"Exit"
                font_size:100
                size: 100,50
                pos: 360,768
            Button:
                text:"About"
                font_size:100
                size:100,500
                pos: 360,512               


 ''')






class style(FloatLayout):
    pass

class MyApp(App):
    def build(self):
        return style()

if __name__=="__main__" :
    MyApp().run()

1 Ответ

0 голосов
/ 30 октября 2019

Чтобы изменить размер 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 может сделать работу за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...