因此,我會直接指出,並將在最後插入代碼,但主要問題是我正在處理一個python文件(對於僞GUI使用kivy) ,問題是我爲每個屏幕都有單獨的文件,所以它們也會作爲單獨的應用程序工作,而我所無法做到的是將信息從一個類導入到另一個類,即使它們實際上來自同一個文件。已經閱讀過類似的問題,並已經理解如何在相同的代碼中將變量從一個變量傳遞到另一個變量,但是仍然無法完成這項工作。python傳遞兩個導入類之間的變量
這裏是代碼,至少是重要的部分;
contacts.py:
import kivy
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.screenmanager import Screen
from kivy.lang import Builder
from functools import partial
import time
from neo4j.v1 import GraphDatabase, basic_auth
neodb = GraphDatabase.driver("bolt://localhost:7687", auth=basic_auth("neo4j", "**********"))
neosession = neodb.session()
kivy.require("1.9.0")
Builder.load_file("Apps/Contacts.kv")
class ContactScreen(Screen):
cid = ""
def __init__(self, **kwargs):
super(ContactScreen, self).__init__(**kwargs)
self.bind(on_enter=self.contactlayout)
def contactlayout(self, *args):
global neosession
contacts = neosession.run("MATCH (a:Person) RETURN a.Name as name, a.Lastname as lastname, a.id as id ORDER"
" BY a.Lastname")
mainlayout = BoxLayout(orientation="vertical")
buttonlayout = BoxLayout(orientation="horizontal", size_hint=(1, None), height=22)
listlayout = BoxLayout(orientation="vertical")
screenlabel = Label(text="Contactos", size_hint=(1, None), height=20, font_size=20)
newcontact = Button(text="+", size_hint=(None, None), size=(20, 20), font_size=20)
newcontact.bind(on_release=self.tonewcontact)
for contact in contacts:
contactlbl = Button(text=contact["lastname"] + " " + contact["name"], size_hint=(1, None), height=26,
font_size=18, text_size=self.size, halign="left", valign="middle")
idn = contact["id"]
contactlbl.bind(on_press=partial(self.tocontact, contact["id"]))
listlayout.add_widget(contactlbl)
bottom = Label()
listlayout.add_widget(bottom)
buttonlayout.add_widget(screenlabel)
buttonlayout.add_widget(newcontact)
mainlayout.add_widget(buttonlayout)
mainlayout.add_widget(listlayout)
self.add_widget(mainlayout)
def tonewcontact(self, *args):
self.manager.current = "NewContactScreen"
def tocontact(self, cidn, *args):
global cid
cid = cidn
# print(cid)
self.manager.current = "SeeContactScreen"
class NewContactScreen(Screen):
def __init__(self, **kwargs):
super(NewContactScreen, self).__init__(**kwargs)
def cancel(self, *args):
self.manager.current = "ContactScreen"
def submit(self, setname, setlastname, setnumber, setemail):
global neosession
if setname != "":
neosession.run("CREATE (a:Person {Name: {name}, Lastname: {lastname}, Number: {number}, Email: {email}, "
"id: {id}})",
{"name": setname, "lastname": setlastname, "number": setnumber, "email": setemail,
"id": time.strftime("%Y%m%d%H%M%S")})
self.ids.name.theTxt.text = ""
self.ids.lastname.theTxt.text = ""
self.ids.number.theTxt.text = ""
self.ids.email.theTxt.text = ""
self.manager.current = "ContactScreen"
else:
pass
class SeeContactScreen(Screen):
def __init__(self, **kwargs):
super(SeeContactScreen, self).__init__(**kwargs)
self.bind(on_enter=self.contactlayout)
def contactlayout(self, *args):
print(ContactScreen.cid)
Brain.py:
import kivy
from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
from kivy.clock import Clock
import time
from neo4j.v1 import GraphDatabase, basic_auth
from Apps.OpenScreen import OpenScreen
from Apps.Calculator import CalculatorScreen
from Apps.Contacts import ContactScreen
from Apps.Contacts import NewContactScreen
from Apps.Contacts import SeeContactScreen
neodb = GraphDatabase.driver("bolt://localhost:7687", auth=basic_auth("neo4j", "**********"))
neosession = neodb.session()
kivy.require("1.9.0")
__author__ = 'enzocanessa'
Window.clearcolor = (1, .5, 0, 1)
Window.size = (480, 320)
# Window.fullscreen = True
Window.show_cursor = True
class MenuScreen(Screen):
def display_time(self):
Clock.schedule_interval(self.give_time, 1)
def give_time(self, *args):
self.display.text = time.strftime("%a %Y-%m-%d %H:%M:%S")
class BrainApp(App):
def build(self):
m = ScreenManager(transition=NoTransition())
m.add_widget(OpenScreen(name="open_screen"))
m.add_widget(MenuScreen(name="MenuScreen"))
m.add_widget(CalculatorScreen(name="CalculatorScreen"))
m.add_widget(SeeContactScreen(name="SeeContactScreen"))
m.add_widget(NewContactScreen(name="NewContactScreen"))
m.add_widget(ContactScreen(name="ContactScreen"))
return m
if __name__ == "__main__":
BrainApp().run()
,顯然會感謝任何幫助,您可以帶上。
什麼是你想分享的變量,'neosession'? – PRMoureu
nope,所選聯繫人的ID – Ecangis
這似乎不太關於python和更多關於'kivy'。你有沒有在類似的問題中看過這個評論? https://stackoverflow.com/questions/34080020/passing-variables-between-two-screen-classes-in-kivy?rq=1#comment55960262_34080020 – Cireo