【问题标题】:Kivy - Drop-down List - How to get current text from selected button?Kivy - 下拉列表 - 如何从选定的按钮获取当前文本?
【发布时间】:2019-01-20 20:52:22
【问题描述】:

在下面的代码中,有一个按钮在按下时会显示一个包含 9 个值的下拉列表。 一旦我选择了这些选项之一,我想在 Python 上打印我选择的值是什么。 例如,如果我选择“Value 4”,在我选择“Value 4”的那一刻,这个值必须打印在我的代码中。

我发现了一些类似的问题,我提供了下面的链接,尽管它们都没有解决我的问题。 Python, Kivy. Get text from dynamically created buttons with a dropdown Retrieving values from a kivy dropdown widget

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.dropdown import DropDown
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label

class Test(App):
    def build(self):
        box = BoxLayout(orientation = 'vertical')
        label = Label(text = 'LABEL')
        button = Button(text='Selecione', font_size=30, size_hint_y=0.15 , on_release = self.lista)
        box.add_widget(label)
        box.add_widget(button)

        return box

    def lista(self, button):
        dropdown = DropDown()

        for index in range(10):
            btn = Button(text='Value %d' % index, size_hint_y=None, height=44)
            btn.text = 'Value %d' %index
            btn.bind(on_release=lambda btn: dropdown.select(btn.text))
            dropdown.add_widget(btn)

        button.bind(on_release=dropdown.open)
        dropdown.bind(on_select=lambda instance, x: setattr(button, 'text', x))
        print(button.text)

Test().run()

我需要在下拉列表中打印所选“按钮”的文本。

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    首先,您需要在lista 函数中添加一个dropdown.open(button),以便在从第一个按钮调用时打开下拉菜单。

    您不必每次调用lista时都重新绑定第一个按钮的release

    您还必须创建一次dropdown,而不是每次调用lista。它的按钮也是如此......

    但是你必须保留它的引用,这样你就可以在lista 函数中使用它。

    最后,您必须将每个下拉按钮的 on_release 属性绑定到打印操作。

    class Test(App):
        def build(self):
            box = BoxLayout(orientation='vertical')
            label = Label(text='LABEL')
            button = Button(text='Selecione', font_size=30, size_hint_y=0.15, on_release=self.lista)
            box.add_widget(label)
            box.add_widget(button)
    
            self.dropdown = DropDown()  # Create the dropdown once and keep a reference to it
            self.dropdown.bind(on_select=lambda instance, x: setattr(button, 'text', x))
    
            for index in range(10):  # create the buttons once
                btn = Button(text='Value %d' % index, size_hint_y=None, height=44,
                             on_release=lambda btn: print(btn.text))  # bind every btn to a print statement
                btn.text = 'Value %d' % index
                btn.bind(on_release=lambda btn: self.dropdown.select(btn.text))
                self.dropdown.add_widget(btn)
            return box
    
        def lista(self, button):
            # dropdown = DropDown()  <---- DON'T NEED THIS
            # button.bind(on_release=self.dropdown.open)  <---- DON'T NEED THIS
            self.dropdown.open(button)  # you need this to open the dropdown
            # print(button.text)
    
    
    Test().run()
    

    【讨论】:

    • 感谢您的代码。效果很好!我在 boxlayout 上添加了一个名为“update”的按钮,我想在每次释放按钮“update”时打印 btn.text。我尝试添加一个全局变量并使 --> global variable = btn.text,但它不起作用。每次释放“更新”按钮时如何打印 btn.text?
    • @JoseGuilherme 如果我的回答回答了您的问题,请不要忘记接受它。如果您还有其他问题,也许对于每个搜索的人来说,在单独的线程中使用一些演示代码提出问题会更好..
    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多