ToggleButtonの状態を関数から変更しようとしています。Kivy - kv言語以外の関数からボタンの状態を変更できません
状態を変更するには、状態を変更する関数がルートウィジェット内にあり、その関数をkv言語から呼び出すしかありません。ここで
は、私は、問題をテストするために設定するいくつかの単純化されたコードです:
のpythonコード:
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.togglebutton import ToggleButton
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
class MainPanel(BoxLayout):
def togOn(self):
self.ids.node1_power.state = 'down'
class avcsServerApp(App):
def build(self):
global root
root = self.root
return Builder.load_file('avcsserver.kv')
def press(self):
root.togOn()
if __name__ == '__main__':
avcsServerApp().run()
KVコード:
<Button>:
font_size: 20
color: .12,.13,.14,1
border: 25, 25, 25, 25
background_down: 'buttono.png'
background_normal: 'button.png'
MainPanel:
canvas:
Color:
rgba: .12,.13,.14,1
Rectangle:
pos: self.pos
size: self.size
ToggleButton:
id: node1_power
text: "POWER"
Button:
text: "TOGGLE"
on_release: app.press()
ストレートKVからtogOn()
関数を呼び出しますコード(つまり、on_release: root.togOn()
)、期待どおりに動作しますが、press()
によって呼び出すと、ボタンの状態が更新されません。
root.ids.node1_power.state = 'down'
のようなものを直接press()
関数に入れることもできません。
私がPythonコードでルートウィジェットを参照するために使用している方法は、適切ではないように(非難する)と思われますが、私はKivyとPythonの新機能ですが、それが私が見つけた唯一の方法でした。
うんん、全体の 'gloablルート'ものは愚かであり、物事を壊す。 'self.root'を直接使うだけで私の問題は解決しました。誰かがその方法を勧めた理由は分かりません... – ebuenger