如何使用 Kivy 获取文本输入的值

Posted

技术标签:

【中文标题】如何使用 Kivy 获取文本输入的值【英文标题】:How to get value of textinput with Kivy 【发布时间】:2015-11-12 02:43:14 【问题描述】:

我是 Kivy 的新手,由于我无法在 PySide 上练习(一些动态库损坏或者我不知道是什么),我想试试这个巨大的工具。

我现在迷路了,我试着这样做: Get textinput value in Kivy app

但我不这样做:

<ProduitScreen>:
    GridLayout:
        rows: 3
        cols: 2
        padding: 10
        spacing: 10
        Label:
            font_size: 20
            text: 'Nom du produit'
        TextInput:
            font_size: 20
            id: nom
        Label:
            font_size: 20
            text: 'Prix'
        TextInput:
            font_size: 20
            id: prix
        Button:
            text: 'Ajouter'
            on_press: self.ajouter()
        Button:
            text: 'Quitter'
            on_press: root.manager.current = 'menu'

因此,带有“Ajouter”字段文本的按钮必须允许我获取两个字段的值并将它们添加到列表中,但是:

AttributeError: 'Button' object has no attribute 'ajouter'

在我的课堂上是这样定义的:

class ProduitScreen(Screen):
    def ajouter():
        print "%s au prix de %d a ete ajoute" % (self.nom.txt , float(self.prix.txt))

有人能告诉我怎么做吗?

编辑:黑引号不保存缩进,所以有完整的代码http://pastebin.com/W1WJ8NcL

【问题讨论】:

【参考方案1】:

ajouter 方法是ProduitScreen 的成员而不是Button 所以你应该使用root 来引用它:

    Button:
        text: 'Ajouter'
        on_press: root.ajouter()

同时解决您对ajouter 的定义的问题:

class ProduitScreen(Screen):
    def ajouter(self):
        print "%s au prix de %f a ete ajoute" % (self.nom.text , float(self.prix.text))

为了在你的python代码中使用nomprix,把这个添加到kv代码中:

<ProduitScreen>:
    nom: nom
    prix: prix

【讨论】:

绝对有效!我可以用 on_press 调用什么函数来退出应用程序? (适用于 android、unix、windows 等的通用功能...) 试试from kivy.app import App; App.get_running_app().stop() 太棒了。如果我在使用 Kivy 时遇到问题,我会和你说几句话。非常感谢老兄。 第 N 个问题。现在我知道如何从 GUI 中获取数据,如何在 GUI 中使用数据?我有一个列表,我想从中生成按钮和标签。如何 ? ^^. 详细说明,如果您觉得解释很大,我建议将其作为新问题提出,我会很乐意回答您和其他许多用户。

以上是关于如何使用 Kivy 获取文本输入的值的主要内容,如果未能解决你的问题,请参考以下文章

如何将文本输入值添加到kivy python中字典中的值?

如何在 Kivy 的相应文本输入区域中获取输出?

如何从 kivy 按钮中获取文本?

如何在kivyMD中获取标签的文本输入

Kivy 无法使用 ScreenManager 获取文本输入

在 Kivy Python 中使用预定义值创建文本输入