You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KivyMD按钮无法正常释放求助:点击中心无效仅底部可释放

按钮触摸区域异常问题排查与解决

问题描述

点击按钮中心无法释放按钮,仅点击按钮底部时可以正常释放,推测是坐标计算存在问题。

代码示例

from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
from kivymd.app import MDApp
from kivymd.uix.tab import MDTabsBase

kv = '''
MDBottomNavigation:
    MDBottomNavigationItem:
        MDTabs:
            MyTab:
                title: 'tab'
                ScrollView:
                    MDRectangleFlatButton:
                        id: button
                        text: self.state
                        font_size: 60
'''


class MyTab(FloatLayout, MDTabsBase):
    pass


class MyApp(MDApp):
    def build(self):
        return Builder.load_string(kv)


MyApp().run()

环境版本

  • python 3.8
  • Kivy 2.1.0
  • kivymd 1.1.1

问题原因与解决方案

核心问题是**FloatLayout与MDTabsBase的布局逻辑冲突,导致触摸坐标映射错误**:FloatLayout默认让子控件占满父容器,但MDTabs的内部布局会对坐标进行额外处理,两者叠加后,按钮的实际触摸区域被偏移,只有底部区域能正确响应释放事件。

最优解决方案

将MyTab的父类从FloatLayout改为BoxLayout(或MDBoxLayout),因为BoxLayout的布局逻辑与MDTabs适配性更好,不会出现坐标偏移:

修改后的代码:

from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivymd.app import MDApp
from kivymd.uix.tab import MDTabsBase

kv = '''
MDBottomNavigation:
    MDBottomNavigationItem:
        MDTabs:
            MyTab:
                title: 'tab'
                ScrollView:
                    MDRectangleFlatButton:
                        id: button
                        text: self.state
                        font_size: 60
'''


class MyTab(BoxLayout, MDTabsBase):
    pass


class MyApp(MDApp):
    def build(self):
        return Builder.load_string(kv)


MyApp().run()

备选方案(保留FloatLayout)

若必须使用FloatLayout,需手动指定ScrollView的尺寸与位置,确保坐标映射正确:

MyTab:
    title: 'tab'
    ScrollView:
        size_hint: 1, 1
        pos: 0, 0
        MDRectangleFlatButton:
            id: button
            text: self.state
            font_size: 60

但此方式不如改用BoxLayout简洁可靠。


内容的提问来源于stack exchange,提问作者woxy08

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:15:32