0
我試圖從函數中更改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()
千伏代碼:
<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代碼來引用根插件的方法是難辭其咎的,因爲似乎正確的(在global root
和root=self.root
線)沒有,但我是新來的Kivy和Python,這是我發現的唯一途徑。
是的,整個'gloabl根'的東西是愚蠢的,打破了東西。直接使用'self.root'解決了我的問題。我不知道爲什麼有人推薦這種方法... – ebuenger