首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使on_press在自定义按钮中工作?

如何使on_press在自定义按钮中工作?
EN

Stack Overflow用户
提问于 2017-07-18 23:53:46
回答 1查看 514关注 0票数 1

我正在尝试创建一个自定义按钮,它将在按下(实际上改变图像上的色调)时改变颜色,甚至无法使on_press正常工作。该应用程序运行,但按下按钮会出现错误:“属性错误:'ImageButton‘对象没有属性'change_color'”

python文件:

代码语言:javascript
代码运行次数:0
运行
复制
import kivy
kivy.require("1.10.0")
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.image import Image
from kivy.lang.builder import Builder

class Container(BoxLayout):
    pass

class ImageButton():
    def change_color(self):
        print("Success!")

class TestName(App):
    def build(self):
        return tester

tester = Builder.load_file("test.kv")

if __name__ == '__main__':
    TestName().run()

基维档案:

代码语言:javascript
代码运行次数:0
运行
复制
Container:

<Container>:
    BoxLayout:
        ImageButton:
            source: "emptybox.png"


<ImageButton@Button>:
    source: None
    on_press: root.change_color()

    Image:
        source: root.source
        pos: root.pos
        size: root.size
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-19 01:00:53

我在您的代码中看到了两个问题:

  • 首先,build方法返回tester (Builder.load_file的输出)。
  • 另一方面,您的ImageButton类在.py文件中应该继承自kivy.uix.button.Button

我不知道你想要改变什么“颜色”,我给你留下一个例子,当你按下时,你会改变背景色:

代码语言:javascript
代码运行次数:0
运行
复制
import kivy
kivy.require("1.10.0")

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.lang.builder import Builder
from random import random


kv_text = '''
<Container>:
    BoxLayout:
        ImageButton:
            source: "emptybox.png"


<ImageButton@Button>:
    source: None
    on_press: self.change_color()

    Image:
        source: root.source
        pos: root.pos
        size: root.size

'''


class Container(BoxLayout):
    pass

class ImageButton(Button):
    def change_color(self):
        self.background_color = (random(), random(), random(),  1)

class TestName(App):
    def build(self):
        Builder.load_string(kv_text)
        return Container()

if __name__ == '__main__':
    TestName().run()

输出:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45178846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档