Kivy Spinner 没有立即更新文本值的问题
Issue with a Kivy Spinner not updating text value right away
我是 运行 一个快速的小测试,通过将值打印到 TextInput 来显示微调器的当前选定值。
当点击微调器时,它会打开下拉菜单,当我点击“显示所有”选项时,它会像它应该的那样将其设置为活动状态(这意味着它是当前选择的值)并且下拉菜单会关闭,但它不会似乎没有正确注册,因为它不会进入功能,直到我打开下拉菜单并再次单击该值。
关于如何解决这个问题有什么建议吗?
from kivy.uix.spinner import Spinner
from kivy.uix.widget import Widget
import kivy.event
from kivy.uix.textinput import TextInput
from kivy.app import App
from kivy.core.window import Window
import kivy
def Display_All(s):
displayWindow.text = s
return None
def Pick(event):
val = fileMenu.text
if val == 'Display All':
Display_All(val)
Root = Widget(size = (890, 505))
displayWindow = TextInput(pos = (250, 30), size = (620, 470))
fileMenu = Spinner(text = 'File',
values = ('File', 'Display All', 'Print', 'Search Specific'),
size = (120, 44), pos = (0, 460))
fileMenu.bind(on_press = Pick)
Root.add_widget(displayWindow)
Root.add_widget(fileMenu)
class ExampleApp(App):
def build(self):
return Root
Window.size = (890, 505)
if __name__ == '__main__':
ExampleApp().run()
该行为完全符合预期:on_press
在单击时触发,而不是在 text
属性 更改时触发。因此,您应该将 Pick
更改为:
def Pick(sender, val):
if val == 'Display All':
Display_All(val)
(请注意 val
已经包含 text
值,因此无需显式检索它)。并使用
将 Pick
绑定到事件
fileMenu.bind(text = Pick)
我是 运行 一个快速的小测试,通过将值打印到 TextInput 来显示微调器的当前选定值。
当点击微调器时,它会打开下拉菜单,当我点击“显示所有”选项时,它会像它应该的那样将其设置为活动状态(这意味着它是当前选择的值)并且下拉菜单会关闭,但它不会似乎没有正确注册,因为它不会进入功能,直到我打开下拉菜单并再次单击该值。
关于如何解决这个问题有什么建议吗?
from kivy.uix.spinner import Spinner
from kivy.uix.widget import Widget
import kivy.event
from kivy.uix.textinput import TextInput
from kivy.app import App
from kivy.core.window import Window
import kivy
def Display_All(s):
displayWindow.text = s
return None
def Pick(event):
val = fileMenu.text
if val == 'Display All':
Display_All(val)
Root = Widget(size = (890, 505))
displayWindow = TextInput(pos = (250, 30), size = (620, 470))
fileMenu = Spinner(text = 'File',
values = ('File', 'Display All', 'Print', 'Search Specific'),
size = (120, 44), pos = (0, 460))
fileMenu.bind(on_press = Pick)
Root.add_widget(displayWindow)
Root.add_widget(fileMenu)
class ExampleApp(App):
def build(self):
return Root
Window.size = (890, 505)
if __name__ == '__main__':
ExampleApp().run()
该行为完全符合预期:on_press
在单击时触发,而不是在 text
属性 更改时触发。因此,您应该将 Pick
更改为:
def Pick(sender, val):
if val == 'Display All':
Display_All(val)
(请注意 val
已经包含 text
值,因此无需显式检索它)。并使用
Pick
绑定到事件
fileMenu.bind(text = Pick)