如何打印在.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文件中?的主要内容,如果未能解决你的问题,请参考以下文章