簡體   English   中英

如何使用 Kivy 和 Python 訪問 class 之外的數據列表

[英]How do I access the data list outside the class with Kivy and Python

我正在嘗試創建一個網格並希望在列表中檢索用戶的數據我同時在 mysql 上工作,以便在其中添加數據,所以我基本上想訪問我使用過的數據列表AppLayout Class 中的按下方法,以便在 go 前面。

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>}]

一切都取決於你想如何使用它。


通常我會直接運行 function 和 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 ...

我會將 class 分配給全局變量

applayout = Applayout()

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

現在每個人都可以通過applayout.data訪問數據。


Eventaully 我會將data創建為外部 object 並將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 - 無需將其作為參數發送 - 但正如Python 的禪宗所說"Explicit is better than implicit." - 它意味着data作為論據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM