如何使用Kivy和Python访问类外的数据列表

2024-04-24 20:21:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个网格,并希望在一个列表中检索用户的数据,我正在并行处理mysql,以便在其中添加数据,因此我基本上希望访问数据列表,我在AppLayout类的pressed方法中使用了该数据列表,以便继续

import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button


class Applayout(GridLayout):

    def __init__(self , **kwargs): 

        super(Applayout , self).__init__(**kwargs)
        

        self.cols = 1

        self.inside = GridLayout()
        self.inside.cols = 2

        self.inside.add_widget(Label(text = "First Name: "))
        self.first_name = TextInput(multiline = False)
        self.inside.add_widget(self.first_name)

        self.inside.add_widget(Label(text = "Last Name: "))
        self.last_name = TextInput(multiline = False)
        self.inside.add_widget(self.last_name)

        self.inside.add_widget(Label(text = "Email: "))
        self.email = TextInput(multiline = False)
        self.inside.add_widget(self.email)

        self.add_widget(self.inside)

        self.submit = Button(text = "Submit", font_size = 40)
        self.submit.bind(on_press = self.pressed) 
        self.add_widget(self.submit)

    def pressed(self , instance):
        first_name = self.first_name.text
        last_name = self.last_name.text
        email = self.email.text

        person_data = {"First Name": first_name , "Last Name": last_name , "E-Mail": email}
        data = []
        data.append(person_data)

        print(f"Name: {first_name} {last_name} , E-Mail: {email} ")
        print("Submitted")

        self.first_name.text = ""
        self.last_name.text = ""
        self.email = ""


class Granth_BagadiaApp(App):
    def build(self):
        return Applayout()



if __name__  == "__main__":
    Granth_BagadiaApp().run()

class MyApp(App):
    def build(self):
        return MyGrid()
    def datas(self):
        return MyGrid().data

这就是我所做的 但是现在我怎么打印这个呢 打字原因 print(MyApp().datas()) 我明白了 [{'Name': <ObjectProperty name=nameee>, 'E-Mail': <ObjectProperty name=emailll>}]


Tags: textnamefromimportselfadddataemail
1条回答
网友
1楼 · 发布于 2024-04-24 20:21:59

一切都取决于你想如何使用它


通常我会直接使用SQL运行函数,并将data作为参数发送

class Applayout()

    def pressed(self, instance):
        data = [{
            "First Name": self.first_name.text, 
            "Last Name": self.last_name.text, 
            "E-Mail": self.email.text
        }]

        function_with_sql(data)
        #other_object.function_with_sql(data)

        # ... other code ...

最后,我将使用queue与其他进程通信

class Applayout()

    def pressed(self, instance):
        data = [{
            "First Name": self.first_name.text, 
            "Last Name": self.last_name.text, 
            "E-Mail": self.email.text
        }]

        queue_to_other_process.put(data)

        # ... other code ...

但是如果我必须提供数据访问权限,那么首先我将使用self.data

class Applayout()

    def __init___(...):
        self.data = [] # default value at start 

        # ... other code ...

    def pressed(self, instance):
        self.data = [{
            "First Name": self.first_name.text, 
            "Last Name": self.last_name.text, 
            "E-Mail": self.email.text
        }]

        # ... other code ...

我会给全局变量赋值

applayout = Applayout()

class Granth_BagadiaApp(App):
    def build(self):
        return applayout

现在每个人都可以通过applayout.data访问数据


最终,我将创建data作为外部对象,并将data作为参数发送给Applayout和其他类

data = []

class Applayout()

    def __init___(..., data):
        self.data = data   
        
        # ... other code ...
        
    def pressed(self, instance):
        self.data.clear()  # not `self.data = []` because it will remove access to external `data`
        
        self.data.append({
            "First Name": self.first_name.text, 
            "Last Name": self.last_name.text, 
            "E-Mail": self.email.text
        })

        # ... other code ...

applayout = Applayout(data)

class Granth_BagadiaApp(App):
    def build(self):
        return applayout

当然,对于外部data,您可以在类中直接使用data,而无需将其作为参数发送,但正如The Zen of Python{}所说,它意味着data作为参数

相关问题 更多 >