如何打印在.kv(kivy)中输入的TextInput值,以打印在.py文件中?

Posted

技术标签:

【中文标题】如何打印在.kv(kivy)中输入的TextInput值,以打印在.py文件中?【英文标题】:How to print TextInput value entered in .kv (kivy), to be printed in .py file? 【发布时间】:2020-09-12 16:29:54 【问题描述】:

我是 kivy 和 Python 的新手。 这是我的代码的 sn-p: .py 文件:

    from kivy.app import App
    from kivy.lang import Builder
    from kivy.uix.screenmanager import ScreenManager, Screen
    from kivy.properties import ObjectProperty, StringProperty
    from kivy.uix.popup import Popup
    from kivy.uix.label import Label
    from database import DataBase    

class IpickupWindow(Screen):
n = ObjectProperty(None)
start1 = StringProperty('Test')
current = ""
pop = StringProperty("")
def on_enter(self, *args):
    name = db.curr_user(self.current)
    self.n.text = "Hi, " + name
    print(self.start1)


def on_leave(self, *args):
    print(self.start1)
    #print(self.start1.text)

def btn(self):
    popup = CustomPopup()
    print(self.pop)
    popup.open()

.kv 文件:

<IpickupWindow>:
name:"Ipick"
n:n
start1: str(start)

FloatLayout:
    cols: 1

    FloatLayout:
        size: root.width, root.height/2

        Label:
            id: n
            pos_hint:"x": 0.0, "top":1.0
            size_hint:0.8, 0.2

        Label:
            pos_hint:"x": 0.1, "top":0.9
            size_hint:0.8, 0.2
            text: "Please provide the below details to find the best ride for you: "
        Label:
            pos_hint:"x": 0.0, "top":0.75
            size_hint:0.4, 0.2
            text: "Start Location: "
        TextInput:
            id: start
            font_size: (root.width**2 + root.height**2) / 13**4
            multiline: False
            pos_hint: "x": 0.4 , "top":0.7
            size_hint: 0.3, 0.1

        Label:

            pos_hint:"x": 0.0, "top":0.55
            size_hint:0.4, 0.2
            text: "End Location: "
        TextInput:
            id: end
            font_size: (root.width**2 + root.height**2) / 13**4
            multiline: False
            pos_hint: "x": 0.4 , "top":0.5
            size_hint: 0.3, 0.1

        Label:
            pos_hint:"x": 0.0, "top":0.35
            size_hint:0.4, 0.2
            text: "Time frame: "
        TextInput:
            id: time
            font_size: (root.width**2 + root.height**2) / 13**4
            multiline: False
            pos_hint: "x": 0.4 , "top":0.3
            size_hint: 0.3, 0.1

    Button:
        pos_hint:"x":0.4, "top": 0.1
        size_hint:0.2,0.1
        text: "Submit"
        on_press: root.btn()

所以以下是两个问题:

    尝试在 on_enter 函数中打印 start1 时,正在打印 控制台中的这个:

-- 我想打印 kivy 文本框的值

    尝试在 on_leave 函数中打印 start1 时,空值为 正在打印。我想打印 kivy 文本框的值。

【问题讨论】:

请发minimal reproducible example。 【参考方案1】:

您将start1 定义为StringProperty('Test'),并且在.kv 文件中您使用的是start1: str(start),它不会创建对TextInput 对象的引用,而是start1 是指TextInput 对象的字符串表示形式。

要打印 kivy 文本框值,您需要将 start1 定义为 ObjectProperty(None) 并在 .kv 文件 start1: start 中。然后您可以使用self.start1.text 简单地引用相应.py 文件中的TextInput 值。

所以在 .py 文件中使用:

class IpickupWindow(Screen):
    n = ObjectProperty(None)
    start1 = ObjectProperty(None)
    current = ""
    pop = StringProperty("")
    def on_enter(self, *args):
        name = db.curr_user(self.current)
        self.n.text = "Hi, " + name
        print(self.start1.text)

在.kv文件中使用:

<IpickupWindow>:
    name:"Ipick"
    n:n
    start1: start

其余代码 sn-p 保持不变,请注意缩进。

【讨论】:

以上是关于如何打印在.kv(kivy)中输入的TextInput值,以打印在.py文件中?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 KV 语言在 Kivy 中制作自定义按钮?

在 KV 语言中使用 Kivy Garden Graph

如何在 python 中获取用户输入(Kivy 框架)

如何在 KivyMD 的 .kv 文件中使用 kivy 中的数据表?

在 Kivy.kv 文件中,我如何引用另一个类中的方法

如何在 OSX 上的 Pycharm 中获得 Kivy、.kv、文件的语法高亮显示? [复制]