所以我创建了一个带有 ScreenManager 的小 Kivy 应用程序。默认屏幕和设置屏幕。
要从 settigs 返回,我有一个按钮正在执行:root.manager.current = 'settings'
现在按钮填满了整个屏幕。我无法弄清楚如何将按钮大小限制为仅图标大小。
千伏:
#:import Label kivy.uix.label
#:import Button kivy.uix.button
#:import TextInput kivy.uix.textinput
#:import BoxLayout kivy.uix.boxlayout
#:import FloatLayout kivy.uix.floatlayout
#:import GridLayout kivy.uix.gridlayout
#:import Image kivy.uix.image
<DefaultScreen>:
FloatLayout:
id: "menuFloatLayout"
size: 500, 500
Button:
pos: 0, 0
on_press: root.manager.current = 'settings'
Image:
source: 'settings.png'
y: self.parent.height - 50
x: self.parent.x
size: 50, 50
allow_stretch: True
keep_ratio: False
<SettingsScreen>:
FloatLayout:
id: "settingsFloatLayot"
size: 500, 500
Button:
size: 0, 0
pos: 0, 0
on_press: root.manager.current = 'default'
Image:
source: 'return.png'
y: self.parent.height - 50
x: self.parent.x
size: 50, 50
allow_stretch: True
keep_ratio: False
GridLayout:
pos: 0, 50
cols: 2
Label:
text: "Serialport:"
TextInput:
multiline: False
id: "serialPortTextInput"
py:
#s======================================================================================================================#
# s IMPORT
# s======================================================================================================================#
import sys
import kivy
import os
# kivyimports
from kivy.uix.screenmanager import Screen, ScreenManager, NoTransition
from kivy.app import App
# s======================================================================================================================#
# s Setup
# s======================================================================================================================#
os.chdir(os.path.dirname(sys.argv[0]))
# s======================================================================================================================#
# s settings Button functions
# s======================================================================================================================#
# s======================================================================================================================#
# s kivy
# s======================================================================================================================#
class DefaultScreen(kivy.uix.screenmanager.Screen):
pass
class SettingsScreen(kivy.uix.screenmanager.Screen):
pass
class ModeltrainApp(kivy.app.App):
def build(self):
MainSM = kivy.uix.screenmanager.ScreenManager(transition=NoTransition())
MainSM.add_widget(DefaultScreen(name="default"))
MainSM.add_widget(SettingsScreen(name="settings"))
#textvardeclaration
return MainSM
if __name__ == "__main__":
ModeltrainApp().run()
到目前为止,我尝试了 border() 但没有奏效 这是 2 张照片: return.png settings.png
答案 0 :(得分:1)
问题是,您没有覆盖 size_hint 属性。根据 FloatLayout documentation,FloatLayout 的每个子项都为每个轴分配了 size_hint 1。您必须覆盖它才能使 size 属性起作用。
注意:要使图像在按钮内完美居中,按钮和图像必须共享相同的 pos 和 size 值。
编辑的 .kv 文件:
#:import Label kivy.uix.label
#:import Button kivy.uix.button
#:import TextInput kivy.uix.textinput
#:import BoxLayout kivy.uix.boxlayout
#:import FloatLayout kivy.uix.floatlayout
#:import GridLayout kivy.uix.gridlayout
#:import Image kivy.uix.image
<DefaultScreen>:
FloatLayout:
id: "menuFloatLayout"
size: 500, 500
Button:
size_hint_x: None
size_hint_y: None
size: 50,50
pos: 0, 550
on_press: root.manager.current = 'settings'
Image:
source: 'settings.png'
pos: 0, 550
size: 50, 50
allow_stretch: True
keep_ratio: False
<SettingsScreen>:
FloatLayout:
id: "settingsFloatLayot"
size: 500, 500
Button:
size_hint_x: None
size_hint_y: None
size: 50,50
pos: 0, 550
on_press: root.manager.current = 'default'
Image:
source: 'return.png'
pos: 0, 550
size: 50, 50
allow_stretch: True
keep_ratio: False
GridLayout:
pos: 0, 50
cols: 2
Label:
text: "Serialport:"
TextInput:
multiline: False
id: "serialPortTextInput"