Поэтому у меня возникли проблемы с пониманием того, как изменить цвет кнопки, которая находится на другом экране, по сравнению с кнопкой, которая меняет цвет этой кнопки (извините, если это трудно понять).Я довольно новичок в python и действительно новичок в Kivy, поэтому я постараюсь объяснить это как можно лучше.
В <ChannelOneWindow>
у меня есть enableSwitchOne ToggleButton, который меняет свой цвет и colourMarkerOne через оператор if.Мне также нужно включить enableSwitchOne, чтобы изменить цвет colourMarker1 в <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()
'' '' ''
Дайте мне знать, если больше информациинужен, и я сделаю все возможное.