Размер кнопок и меток Kivy в зависимости от размера дисплея

avatar
Adam Kamil
8 апреля 2018 в 01:57
3739
1
1

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

Код Python:

import kivy
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen


class OpeningScreen(Screen):
    pass

class LoginScreen(Screen):
    pass

class SignupScreen(Screen):
    pass

class ScreenManagement(ScreenManager):
    pass


AppKv = Builder.load_file("App.kv")


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


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

Код Kv:

#: import FadeTransition kivy.uix.screenmanager.FadeTransition
#: import hex kivy.utils.get_color_from_hex

#------------------------------------------------------------#

ScreenManagement:
    transition: FadeTransition()
    OpeningScreen:
    LoginScreen:
    SignupScreen:


#------------------------------------------------------------#

<OpeningScreen>:
    name: "OpeningScreen"
    canvas:
        Color:
            rgb: 1, 1, 1
        Rectangle:
            pos: self.pos
            size: self.size

    Label:
        text: "Welcome"
        color: 1,1,1,1
        font_size: 45
        size_hint: 0.2,0.1
        pos_hint: {"x":0.40, "top":0.995}

    Button:
        size: 100,75
        on_release: app.root.current = "LoginScreen"
        text: "Login"
        font_size: 50
        color: 1,1,1,1
        background_color: (0,0,0,1)
        background_normal: ""
        background_down: ""
        size_hint: 0.3,0.2
        pos_hint: {"x":0.35, "top":0.7}

    Button:
        size: 100,75
        on_release: app.root.current = "SignupScreen"
        text: "Sign up"
        font_size: 50
        color: 1,1,1,1
        background_color: (0,0,0,1)
        background_normal: ""
        background_down: ""
        size_hint: 0.3,0.2
        pos_hint: {"x":0.35, "top":0.4}

#------------------------------------------------------------#

<LoginScreen>:
    name: "LoginScreen"
    canvas:
        Color:
            rgb: 1, 1, 1
        Rectangle:
            pos: self.pos
            size: self.size
    Label:
        text: "Login In"
        color: 0,0,0,1
        font_size: 45
        size_hint: 0.2,0.1
        pos_hint: {"x":0.40, "top":0.995}

#------------------------------------------------------------#

<SignupScreen>:
    name: "SignupScreen"
    canvas:
        Color:
            rgb: 1, 1, 1
        Rectangle:
            pos: self.pos
            size: self.size
    Label:
        text: "Sign Up"
        color: 0,0,0,1
        font_size: 45
        size_hint: 0.2,0.1
        pos_hint: {"x":0.40, "top":0.995}

Я был бы очень признателен, если бы кто-нибудь помог мне с этим. Я пытался узнать, как это сделать, но не смог

Источник

Ответы (1)

avatar
John Anderson
8 апреля 2018 в 15:45
2
Размеры

Button и Label можно задать несколькими способами:

  1. Использовать Kivy Metrics. Вы можете установить размеры, используя dp (например, dp(100)), это размер пикселя, не зависящий от плотности. Существует также sp (используется аналогичным образом), который является независимым от масштаба пикселем (обычно используется для размеров шрифта)

  2. .
  3. Используйте self.texture_size. Вы можете установить размеры, используя это как size: self.texture_size. Это сделает ваши виджеты Button и Label достаточно большими, чтобы поместиться в них текст. Вы можете добавить некоторые отступы, используя что-то вроде:

    width: self.texture_size[0] + dp(10) height: self.texture_size[1] + dp(10)

  4. Используйте size_hint. Это гарантирует, что виджеты Button и Label будут занимать одинаковый процент экрана независимо от устройства.

Не забудьте установить size_hint на None, None, чтобы первые два работали.

Adam Kamil
8 апреля 2018 в 18:11
0

Спасибо мне помогло! Вы знаете, как сделать, чтобы кнопки были прямо в центре дисплея?

John Anderson
9 апреля 2018 в 01:44
0

Вы можете установить их в центре своего родителя, используя: pos_hint: {"center_x":0.5, "center_y":0.5}