2017-12-24 4 views
0

Ziemlich neu zum Erstellen von Anwendungen in Python und ich kann nicht herausfinden, wie man Argumente von anderen Klassenfunktionen an andere Klassen übergeben. Basierend auf was ich lese, ich denke, ich sollte def init in CustomPopup-Klasse verwenden, aber nicht in der Lage, es funktioniert zu bekommen. HierPython bekommt Attribut von einer anderen Klasse in eine andere Klasse

ist eine gestrippt Version von dem, was ich zu tun versuche, dies funktioniert aber ich versuche txt_input von Popuper zu CustomPopup zu bekommen, aber nicht bekommen kann es funktioniert:

Python:

from kivy.app import App 
from kivy.lang import Builder 
from os import listdir 
from kivy.uix.screenmanager import Screen, ScreenManager 
from kivy.uix.popup import Popup 
import teradata 
import Global 

class CustomPopup(Popup): 
    txt_input = 'Text' 

udaExec = teradata.UdaExec() 

kv_path = './kv/' 
for kv in listdir(kv_path): 
    Builder.load_file(kv_path+kv) 

class LoginScreen(Screen): 

    def buttonClicked(self): 
     Global.u_name = self.ids.u_name.text 
     Global.p_word = self.ids.p_word.text 
     status = None 
     try: 
      with udaExec.connect("${dataSourceName}",username=self.ids.u_name.text,password=self.ids.p_word.text) as session: 
       try: 
        session 
       except teradata.DatabaseError as e: 
        status = e.code 
     except teradata.DatabaseError as e: 
      status = e.code 

     if status == 8017: 
      self.popuper('Hello') 
     elif status == None: 
      self.popuper('All Good') 
     elif status == 0: 
      self.popuper('Fill in username') 
     else: 
      self.popuper('Something else') 

    def popuper(self, txt_input): 
     popuper = CustomPopup() 
     popuper.open() 

class MainScreen(Screen): 
    pass 

class ScreenManagement(ScreenManager): 
    pass 

application = Builder.load_file("main.kv") 

class MainApp(App): 

    def build(self): 
     self.title = 'Push Notfication Tool' 
     return application 

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

Kivy :

<[email protected]>: 
    size_hint: (.5,.5) 
    auto_dismiss: False 
    title: "af" 
    BoxLayout: 
     orientation: 'vertical' 
     Label: 
      text: root.txt_input 
     Button: 
      text: "Close now" 
      on_press: root.dismiss() 

Vielen Dank!

* EDIT hinzugefügt Kivy-Datei als auch.

+0

Bitte geben Sie eine [Minimal, vollständig und prüfbare Beispiel] (https://stackoverflow.com/help/ mcve) - Dein Code macht ohne die richtige Einrückung und Syntax keinen Sinn - kurz: Es funktioniert nicht atm. - "__init__" ist z. covered hier: https://stackoverflow.com/a/625097/7505395 –

+0

Mögliche Duplikate von [Python \ _ \ _ init \ _ \ _ und selbst was tun sie?] (https://stackoverflow.com/questions/625083/python-init-and-self-was-tun-sie-tun) –

+0

Hallo, hinzugefügtes Beispiel des aktuellen Codes. Alles andere funktioniert so weit anders als ich nicht herausfinden kann, wie man txt_input von popuper zu CustomPopup bekommt. – puputtiap

Antwort

0

Versuchen Sie, ein paar Dinge:

class CustomPopup(Popup): 
    txt_input = StringProperty('Text') 

    def __init__(self, txt_input, **kw): 
     super().__init__(**kw) 
     self.txt_input = txt_input 

... 
    def popuper(self, txt_input): 
     popuper = CustomPopup(txt_input) # send txt_input! 
     popuper.open() 

jetzt die kv-Datei

<CustomPopup>: # removed @Popup since you created it in python... 
    size_hint: (.5,.5) 
    auto_dismiss: False 
    title: "af" 
    BoxLayout: 
     orientation: 'vertical' 
     Label: 
      text: root.txt_input 
     Button: 
      text: "Close now" 
      on_press: root.dismiss() 
+0

Dank Yoav, das tat den Trick! – puputtiap

Verwandte Themen