我使用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()
答案 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%的按钮是高度将开始创建到达窗口顶部。