Kivy 按钮在 Window 调整大小时不会停留

Kivy Buttons Won't Stay Put During Window Resizing

我正在使用 kivy 1.10 和 Python 制作游戏。

我想让程序中的按钮在 window 调整大小时保持它们的相对位置。我知道如果我可以获得屏幕的特定 height/width,我就可以做到这一点。但是,我不知道如何在调整程序大小后获取该信息。看起来 kivy 可能有一些更简单的方法来让按钮保持不动。

如何在 window 调整大小时使按钮保持原样?

如果可能,请告诉我如何使用 python 来执行此操作,而不是使用 kivy 语言,因为我宁愿尝试远离它。

"""
Python 3.6.4
Kivy 1.10.0

Combines various .py files and
allows the game to run.
"""

__author__ = "RidiculousName"
__date__ = "Jan. 2018"

import sys
from kivy.app import App
from kivy.config import Config
from kivy.uix.image import Image
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout



class MainMenu(FloatLayout):
    def __init__(self, **kwargs):
        super(MainMenu, self).__init__(**kwargs)

    # declares widget buttons
    start_button = Button(pos=(25, 75),
                          background_normal="Images\Start.png",
                          background_down="Images\Start_Down.png",
                          size_hint=(.1, .1))

    load_button = Button(pos=(225, 75),
                         background_normal="Images\Load.png",
                         background_down="Images\Load_Down.png",
                         size_hint=(.1, .1))

    options_button = Button(pos=(425, 75),
                            background_normal="Images\Options.png",
                            background_down="Images\Options_Down.png",
                            size_hint=(.15, .1))

    quit_button = Button(pos=(708, 75),
                         background_normal="Images\Quit.png",
                         background_down="Images\Quit_Down.png",
                         size_hint=(.1, .1))
    quit_button.bind(on_press=sys.exit)

    background = Image(source="Images\Main_Menu.png",
                       pos=(0, 0))

    # Adds widgets in order
    self.add_widget(background)
    self.add_widget(start_button)
    self.add_widget(load_button)
    self.add_widget(options_button)
    self.add_widget(quit_button)

class BanditKing(App):
    def build(self):
        self.title = "Bandit King"
        self.icon = "Window_Icon.png"
        return MainMenu()

def main():
    Config.set("graphics", "width", "1600")
    Config.set("graphics", "height", "900")
    Config.write()
    BanditKing().run()


if __name__ == "__main__":
    main()

您正在您的应用程序中使用 size_hint。您知道还有 pos_hint 属性吗?

用pos的地方,也可以用pos_hint代替:

    start_button = Button(pos=(25, 75))

假设你的window是100 x 100,你可以把上面的固定尺寸改成:

start_button = Button(pos_hint = {'x': 0.25, 'y': 0.75})

并且应该准确地重新分配他们的位置。

如果 Button 是另一个布局的子布局,您将需要父布局也使用 pos_hint 而不是 pos 如果试图使它们相对于 window。

此外,pos_hint 与大小提示协同工作。假设我想要在我的屏幕顶部有一个按钮,它一直延伸到我的屏幕上,但只向下延伸了 10%。你会在 kv 文件中这样写:

 Button:
     size_hint: 1, .1
     pos_hint: {'x': 0, 'y': .9}

或者在py文件中,

 Button(size_hint=(1, .1), pos_hint = {'x': 0, 'y': .9})

假设 Button 没有父级,其宽度等于 windows 宽度,其高度等于 windows 高度的 .1(或 10%)。

所以它的 pos_hint,它总是从 window 的右边开始(因为 'x':0 = windows 宽度的最开始)和 90 % 从 window 底部向上,按钮高度的 10% 将开始创建到达 window.

顶部的位置