Как распечатать значение TextInput, введенное в .kv (kivy), для печати в .py файле? - PullRequest
1 голос
/ 26 мая 2020

Я новичок в kivy и Python. Это фрагмент моего кода: .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()

, поэтому следующие 2 проблемы:

  1. При попытке напечатать start1 в функции on_enter он выводит это в консоли:

- <- объект kivy.uix.textinput.TextInput по адресу 0x00000240AC1E0208 -> - Я хочу напечатать значение текстового поля kivy

При попытке напечатать start1 в функции on_leave печатается нулевое значение. Я хочу напечатать значение текстового поля kivy.

1 Ответ

0 голосов
/ 28 мая 2020

У вас есть start1, определенный как StringProperty('Test'), а в файле .kv вы используете start1: str(start), который не создает ссылку на объект TextInput, а start1 относится к строковому представлению объекта TextInput.

Чтобы напечатать значение текстового поля kivy, вам необходимо определить start1 как ObjectProperty (None) и в файле .kv start1: start. Затем вы можете просто сослаться на значение TextInput в соответствующем файле .py, используя self.start1.text.

Итак, в файле .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

Остальная часть фрагмента кода остается прежней, позаботьтесь об отступах.

...