2015-04-30 91 views
0

我的應用程序有一個默認背景色的按鈕。我只是想在on_press事件中將其背景顏色更改爲另一種顏色。您可能會認爲它與訪問和未訪問的html超鏈接類似,即當單擊鏈接時,它會更改其顏色。如何更改kivy中按鈕的背景顏色?

我嘗試:

#!/usr/bin/kivy 
import kivy 
kivy.require('1.7.2') 

from random import random 
from random import choice 
from kivy.app import App 
from kivy.lang import Builder 
from kivy.uix.screenmanager import ScreenManager, Screen 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.button import Button 
from kivy.properties import StringProperty 

Builder.load_string(""" 
<Highest>: 
    GridLayout: 
     cols: 1 
     Button: 
      text: "Hi" 
      on_press: root.new() 
""") 

class Highest(Screen): 
    def new(self): 
     self.background_color=(1.0, 0.0, 0.0, 1.0) 


# Create the screen manager 
sm = ScreenManager() 
sm.add_widget(Highest(name='Highest')) 

class TestApp(App): 

    def build(self): 
     return sm 

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

但沒有發生在on_press


@inclement

其實,我試圖儘量減少我的問題。

我其實需要的是基於可變

class Highest(Screen): 
    def new(self): 
     if(a==5): 
      self.background_color=(1.0, 0.0, 0.0, 1.0) 
     else: 
      self.background_color=(1.0, 1.0, 1.0, 1.0) 

,所以我想在我的最高級別impementation不同情況給予不同的顏色。請指導。提前致謝。

回答

0

如果你想保留它在一個函數內,你也可以添加一個id到按鈕,然後從最高的實例改變它。

Builder.load_string(""" 
<Highest>: 
    GridLayout: 
     cols: 1 
     Button: 
      id: button_one 
      text: "Hi" 
      on_press: root.new() 
""") 

然後你就可以在引用該id來改變顏色......

class Highest(Screen): 
    def new(self): 
     self.ids['button_one'].background_color = 1.0, 0.0, 0.0, 1.0 
1

但沒有發生在on_press

它實際上呢,你設置你的最高實例的屬性BACKGROUND_COLOR - 但你看不到任何東西發生,因爲它不使用BACKGROUND_COLOR什麼。

你可以,而不是僅僅有:

on_press: self.background_color = (1.0, 0.0, 0.0, 1.0) 

通過把這個在按鈕規則,self指的是你真正想要更改的按鈕實例。

0

我只是想改變它的背景色上on_press事件另一種顏色。

我實際上遇到了類似的問題。我將爲kivy準備所有的慣用p​​ython。我使用回調函數on_press

Class MainWindow(ScreenManager): 
    <..code to add screens and add widget to screen...> 
    <...> 

    def add_button(self): 
     Button(id='button1', text='Hello %d'%i, size_hint=(0.2,0.2), 
           on_press=self.callback, background_color=[1,0,0,1]) 

在我的回調,

def callback(self, value): 
      print '%s pressed.'%value 
      print value.id 
      value.background_color= (0,1,0,1) 

完蛋了。這會將按鈕的背景顏色從紅色更改爲綠色。

我其實需要的是基於可變

您可以在您的回調邏輯不同情況給予不同的顏色..通過a到回調(我會建議使用部分做的)

ps。我也看到你正在使用一個單獨的類的屏幕,但這不應該在這裏

相關問題