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)