背景按钮颜色不会改变 on_press

Posted

技术标签:

【中文标题】背景按钮颜色不会改变 on_press【英文标题】:Background Button Color Doesn't Change on_press 【发布时间】:2020-03-10 17:30:24 【问题描述】:

我试图让这个简单的脚本在使用 on_press 行为按下时更改按钮的颜色。

Python 脚本:kivytest.py

#Import Libraries

#Import Kivy GUI
import kivy

#From kivy, import base class App
# app: always refers to instance of this application
from kivy.app import App

from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.stacklayout import StackLayout

################################################################################
# Creating the root widget used in the .kv file
class testLayout(StackLayout):
    pass

################################################################################

class kivytestApp(App):

    def build(self):
        return testLayout()

test = kivytestApp()

test.run()

对应的.kv文件:kivytest.kv

<StackLayout>:

    #Create the canvas
    canvas:
        #Color the canvas background a dark gray with alpha = 1
        Color:
            rgba: 0.11, 0.15, 0.17, 1

        Rectangle:
            pos: self.pos
            size: self.size

    #Provide the orientation of the stack layout from left to right / top to bottom
    orientation: "lr-tb"

    #Add padding between children and layout
    padding: 10

    #Add spacing between each of its children
    spacing: 5

    Button:
        size_hint: 0.2, None
        text: "second button"
        background_color: [1, 0, 0, 1]
        background_normal: ''
        on_press:
            background_color: [0, 1, 0, 1]
            print("second button pressed")

不幸的是,当我按下应用程序中的按钮时,颜色仍然是红色,但 on_press 上的红色稍微深一些,而不是我指定的绿色。我应该纠正什么?这个实现不是看起来那么简单吗?

【问题讨论】:

【参考方案1】:

您有 2 个错误:

通过仅指示 background_color,您正在创建一个不同于 Button 的 background_color 属性的变量。要引用具有范围的同一对象,您必须使用 self

你不应该在事件中的赋值中使用:,而是=(我认为这是一个错误,kivy在这种情况下不会抛出错误)

综合以上情况,解决办法是:

on_press:
    self.background_color = [0, 1, 0, 1]
    print("second button pressed")

【讨论】:

这行得通。谢谢你的帮助,我不知道第二个错误。我遇到的大多数教程都教使用冒号而不是等号。如果您有任何好的 kivy 资源可以指导我,我很乐意阅读或研究它们。 @Xonu 注意它的使用位置,在 on_X 中你应该使用 python 代码而不是 kivy 代码。不幸的是,我提出的唯一建议是查看文档,因为我不使用其他资源。

以上是关于背景按钮颜色不会改变 on_press的主要内容,如果未能解决你的问题,请参考以下文章

java的按钮颜色可以设置为透明的吗

如何使用On_Press更改动态创建的小部件的BG颜色并使用Pickle保存? (与Kivy的Python)

VS2008如何用代码改变按钮背景颜色,字体大小和颜色

html中点击按钮怎样改变div背景颜色

java改变按钮颜色

两个按钮的背景颜色都改变了