Kivy Button 填充整个屏幕

时间:2021-03-28 10:35:13

标签: python kivy kivy-language

所以我创建了一个带有 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

1 个答案:

答案 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"