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.
顶部的位置
我正在使用 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.
顶部的位置