如何在 Kivy 的 Builder 之外获取用户数据?

Posted

技术标签:

【中文标题】如何在 Kivy 的 Builder 之外获取用户数据?【英文标题】:How to Get User's Data outside of Builder in Kivy? 【发布时间】:2021-11-21 01:31:58 【问题描述】:

我是python的初学者。 4天前我开始学习kivy(也许是kivymd)。我每天都学到新东西。但我找不到任何关于我的问题的答案。我将与您分享。

在学习 kivy 之前,我学习了 tkinter。这是我目前最喜欢的简易 GUI 模块。

在 Tkinter 中:

from tkinter import *

def show_data():
      userdata=user_input.get()
      print('Your Data is: '+userdata)

root=Tk()
root.title('*** Help')
root.geometry('400x400')

user_input_text=Label(root,text='Enter Some Data',font='arial 20')
user_input_text.pack(pady=40)

user_input=Entry(root,font='20')
user_input.pack(pady=10)

user_input_button=Button(root,text='Done',font='20',command=show_data)
user_input_button.pack(pady=10)

root.mainloop()

我可以使用idname.get() 方法在 Def/Function 中打印/获取用户输入的数据。

但在 Kivy 中:

from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.core.window import Window

Window.size=(400,600)

please_help_me="""
MDScreen:

      MDLabel:
      
            text: 'Please Enter Some Data'
            halign:'center'
            pos_hint:'center_x':0.5,'center_y':0.55
            
      MDTextField:
      
            id:user_input
            hint_text: 'Type Here' #How Can I Print/Get User Data outside of builder?
            pos_hint:'center_x':0.5,'center_y':0.44
            size_hint_x:None
            width:300
            
      MDRaisedButton:
      
            text:'Done'
            pos_hint: 'center_x':0.5,'center_y':0.35
"""

class HelpPleaseApp(MDApp):
      def build(self):
          main=Builder.load_string(please_help_me)
          return main
    
      # I wanna create a Function Here That Print User's Inputed data from builder's 'MDTextField'

HelpPleaseApp().run()

我想在按下按钮时打印MDTextField 输入的数据。我知道on_release: print(user_input.text) 可以做到,但它在构建器字符串中。我想在主类下的一个函数中做。我还为它创建了id。但不知道如何在函数中获取MDTextField.text/User 输入的数据并打印出来。我知道你会告诉我用谷歌搜索它,但我已经在谷歌和 youtube 上搜索过它。所以,我需要你的帮助(请)

【问题讨论】:

【参考方案1】:

您可以在MDRaisedButton 部分下添加on_release: app.show_user_input(user_input.text),然后在HelpPleaseApp 中定义show_user_input()

please_help_me="""
MDScreen:
      MDLabel:

            text: 'Please Enter Some Data'
            halign:'center'
            pos_hint:'center_x':0.5,'center_y':0.55

      MDTextField:

            id:user_input
            hint_text: 'Type Here' #How Can I Print/Get User Data outside of builder?
            pos_hint:'center_x':0.5,'center_y':0.44
            size_hint_x:None
            width:300

      MDRaisedButton:

            text:'Done'
            pos_hint: 'center_x':0.5,'center_y':0.35
            on_release: app.show_user_input(user_input.text)
"""

class HelpPleaseApp(MDApp):
      def show_user_input(self, text):
          print(text)

      def build(self):
          main = Builder.load_string(please_help_me)
          return main

【讨论】:

你也可以回答this kivy question吗?

以上是关于如何在 Kivy 的 Builder 之外获取用户数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 Widget Kivy 属性更新**动态添加的**椭圆(不使用 Builder)的颜色?

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

如何使用主 iPhone 视图之外的 UI 元素在 Interface Builder 中设置 UIScrollView?

Kivy - 如何访问由 .kv 文件创建的类的实例?

TypeError: __init__() 得到了一个意外的关键字参数 '__no_builder' Kivy

标签的 Kivy ScrollView 不会滚动