繁体   English   中英

切换按钮以更改其类之外的对象的属性-Kivy

[英]Toggle button to change properties of something outside its class - Kivy

因此,我在理解如何将位于不同屏幕上的按钮的颜色更改为更改按钮颜色的按钮时遇到了麻烦(对不起,如果这很难理解)。 我是python的新手,也是Kivy的新手,所以我会尽力解释一下。

<ChannelOneWindow>我具有enableSwitchOne ToggleButton通过if语句更改其自身和colourMarkerOne的颜色。 我还需要enableSwitchOne更改<HomeWindow>中的<HomeWindow>的颜色。 我知道这可能是通过绑定来完成的,但是Kivy框架的文档尚不完善,对此我感到非常困难。 有人可以帮忙吗?

.kv文件-

#: import sm kivy.uix.screenmanager

WindowManager:
    HomeWindow:
    ChannelOneWindow:



<HomeWindow>:
    name: "home"

    FloatLayout:


        Button:
            pos_hint:{"x":0.0,"y":0.70}
            size_hint: 1.0, 0.2
            font_size: (root.width**2 + root.height**2) / 12**4
            background_normal: '0'
            id: armSwitch
            text: "SAFE"
            background_color: 0, 1, 0, 1
            on_press:
                root.updateText()
                root.updateColour()
                print("Sending To FPGA")




        Button:
            pos_hint:{"x":0,"y":0}
            size_hint: 0.16, 0.17
            font_size: (root.width**2 + root.height**2) / 14**4 #14**4
            text: "1"   
            on_release:
                root.manager.transition.direction = "left"
                root.channeloneBtn()





        ToggleButton:
            pos_hint:{"x":0,"y":0.17}
            size_hint: 0.16, 0.05
            id: colourMarker1
            font_size: (root.width**2 + root.height**2) / 14**4
            background_color: 5, 0, 0, 1            


<ChannelOneWindow>:
    name: "channelone"

    FloatLayout:

        Button:
            pos_hint:{"x":0.0,"y":0.90}
            size_hint: 0.20, 0.09
            font_size: (root.width**2 + root.height**2) / 15**4
            text: "Home"
            on_release:
                root.manager.transition.direction = "right" 
                root.homeBtn()  

        TextInput:
            font_size: (root.width**2 + root.height**2) / 15**4
            multiline: False
            pos_hint: {"x":0.20, "y":0.91}
            size_hint: 0.2, 0.08                    


        ToggleButton:
            pos_hint:{"x":0.35,"y":0.30}
            size_hint: 0.30, 0.10
            font_size: (root.width**2 + root.height**2) / 14**4
            background_normal: '0'
            id: enableSwitchOne
            text: "DISABLED"
            background_color: 1, 0, 0, 1
            on_state: 
                root.Enabled(*args)


        Button:
            pos_hint:{"x":0,"y":0}
            size_hint: 0.16, 0.17
            font_size: (root.width**2 + root.height**2) / 14**4 #14**4
            text: "1"   





        ToggleButton:
            pos_hint:{"x":0,"y":0.17}
            size_hint: 0.16, 0.05
            background_normal: '0'
            id: colourMarkerOne
            font_size: (root.width**2 + root.height**2) / 14**4
            background_color: 1, 0, 0, 1
            on_state: 
                root.Enabled(*args)



'''''''

.py文件-

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import NumericProperty
from kivy.properties import ObjectProperty
from kivy.uix.popup import Popup
from kivy.uix.label import Label



class HomeWindow (Screen):
    name = ObjectProperty(None)
    c = NumericProperty(0)


    def updateText(self):
        self.ids.armSwitch.text="ARMED"
    def updateColour(self):
        self.ids.armSwitch.background_color= 1, 0, 0, 1

    def channeloneBtn(self):
        self.reset()
        sm.current = "channelone"



    def reset(self):
          pass


class ChannelOneWindow (Screen):
    name = ObjectProperty(None)
    c = NumericProperty(0)




    def Enabled(self, *args):
        if args[1]=='down':
            self.Status = "Device on"
            self.ids.enableSwitchOne.background_color= 0, 1, 0, 1
            self.ids.colourMarkerOne.background_color= 0, 1, 0, 1
            self.ids.enableSwitchOne.text="ENABLED"

            print("Channel 1 Enabled")
            c = 1
        else:
            self.Status = "Device off"
            self.ids.enableSwitchOne.background_color= 1, 0, 0, 1
            self.ids.colourMarkerOne.background_color= 1, 0, 0, 1
            self.ids.enableSwitchOne.text="DISABLED"
            print("Channel 1 Disabled")
            c = 0


    def homeBtn(self):
        self.reset()
        sm.current = "home"



    def reset(self):
        pass



class WindowManager(ScreenManager):
    pass



kv = Builder.load_file("buzzcut.kv")

sm = WindowManager()


screens = [HomeWindow(name="home"),ChannelOneWindow(name="channelone") ]
for screen in screens:
    sm.add_widget(screen)


    sm.current = "home"

class BuzzcutApp(App):
    def build(self):
        return sm

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

''''''

让我知道是否需要更多信息,我会尽力而为。

使用self.manager.get_screen("home")

self.manager.get_screen("home").ids.colourMarker1.background_color

Kivy ScreenManager»get_screen

 get_screen(name) 

返回与名称关联的屏幕小部件,或者如果未找到,则引发ScreenManagerException。

片段

class ChannelOneWindow(Screen):
    name = ObjectProperty(None)
    c = NumericProperty(0)

    def Enabled(self, *args):
        if args[1] == 'down':
            self.Status = "Device on"
            self.ids.enableSwitchOne.background_color = 0, 1, 0, 1
            self.ids.colourMarkerOne.background_color = 0, 1, 0, 1
            self.ids.enableSwitchOne.text = "ENABLED"
            self.manager.get_screen("home").ids.colourMarker1.background_color = 0, 1, 0, 1

            print("Channel 1 Enabled")
            c = 1
        else:
            self.Status = "Device off"
            self.ids.enableSwitchOne.background_color = 1, 0, 0, 1
            self.ids.colourMarkerOne.background_color = 1, 0, 0, 1
            self.ids.enableSwitchOne.text = "DISABLED"
            self.manager.get_screen("home").ids.colourMarker1.background_color = 1, 0, 0, 1
            print("Channel 1 Disabled")
            c = 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM