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

如何在Python Kivy中点击按钮打开Popup?报错求助

解决Kivy点击按钮打开Popup报错的问题

嘿,我一眼就看到问题啦!你遇到的AttributeError是因为Kivy的Popup组件的content参数不能直接传字符串——它要求这个参数必须是一个Kivy Widget实例(比如Label、BoxLayout这类UI组件),而不是普通文本。

看错误栈里的关键提示:

AttributeError: 'str' object has no attribute 'fbind'

这说明程序试图给字符串调用只有Widget才有的fbind方法,肯定会报错呀!

修改后的完整代码

把你的clk函数改成下面这样,就能正常弹出窗口了:

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.popup import Popup
from kivy.config import Config
Config.set("graphics", "resizable", 0)
Config.set("graphics", "width", 400)
Config.set("graphics", "height", 500)

class myLayout(BoxLayout):
    def __init__(self, **kwargs):
        super(myLayout, self).__init__(**kwargs)
        btn = Button(text="Click")
        btn.bind(on_press=self.clk)
        self.add_widget(btn)
    
    def clk(self, obj):
        # 先创建一个Label作为弹窗内容,不能直接传字符串
        popup_content = Label(text="I am popup")
        # 创建Popup实例,指定content为Label,还可以设置标题、大小比例
        popup = Popup(title="弹窗提示", content=popup_content, size_hint=(0.8, 0.4))
        popup.open()  # 直接调用open即可,不需要return

class ReminderApp(App):
    def build(self):
        mL = myLayout()
        return mL

if __name__ == "__main__":
    ReminderApp().run()

关键修改点

  • 不再直接把字符串传给Popup的content,而是先创建一个Label组件,把文本放在Label的text属性里
  • 额外添加了title(弹窗标题)和size_hint(弹窗相对于窗口的大小比例)参数,让弹窗更实用美观
  • 去掉了return popup.open(),直接调用popup.open()就可以打开弹窗

这样修改后,点击按钮就能正常弹出包含文本的窗口啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:47:47