Kivy按钮在窗口调整大小期间不会被放置

时间:2018-01-19 23:48:47

标签: python python-3.x graphics 2d kivy

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

我希望程序中的按钮在调整窗口大小时保持相对位置。我知道如果可以获得屏幕的特定高度/宽度,我可以这样做。但是,我不知道如何在调整程序大小后获取该信息。似乎kivy可能有更简单的方法让按钮保持不变。

当窗口调整大小时,如何使按钮保持原位?

如果可能,请告诉我如何在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()

1 个答案:

答案 0 :(得分:0)

您在应用中使用了size_hint。您知道还有pos_hint属性吗?

在使用pos的地方,您也可以使用pos_hint:

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

假设您的窗口是100 x 100,您可以将上面的固定大小更改为:

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

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

如果Buttons是另一个布局的子项,那么如果尝试将它们保持在相对于窗口的位置,则需要父布局也使用pos_hint而不是pos。

此外,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没有父项,其宽度等于窗口宽度,其高度等于窗口高度的.1(或10%)。

所以使用它的pos_hint,它总是从窗口的右边开始(因为'x':0 =窗口宽度的非常开始)和窗口底部的90%,其中10%的按钮是高度将开始创建到达窗口顶部。