[英]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.