Ich habe diese Frage aktualisiert. Ich erstelle zwei Fenster und versuche, Variablen, die in Klasse A erstellt wurden, an Klasse B zu übergeben. Könntest du bitte auf das Problem in meinem Code hinweisen? Hier ist meine Methode:Wie kann ich Variablen von einer Klasse zur anderen übergeben?
class Welcome:
def __init__(self, master, csv_name_sub, csv_name_ses):
self.entrySes = Entry(self.master, bg="LemonChiffon3")
self.entrySub=Entry(self.master,bg="LemonChiffon3")
self.csv_name_sub = str(self.entrySub.get())
self.csv_name_ses = str(self.entrySes.get())
#here users enter some info, they are saved to be used as file name the in following class
class App(Welcome):
def __init__(self, master):
Welcome.__init__(self, master, csv_name_ses, csv_name_sub) #I'm trying use this line to pass the variables from the first class
print('session is', self.csv_name_ses)
print("subject is", self.csv_name_sub)
self.resultFile = open(
"C:\\Users\\xxx" + self.csv_name_sub + '_' + self.csv_name_ses +
'_results.csv', 'w')
#.....
#other codes
def main():
root = Tk()
myApp = Welcome(root, csv_name_ses, csv_name_sub)
root.mainloop()
if __name__ == '__main__':
main()
Das Programm kann ausgeführt werden, aber die Variablen csv_name_ses
und csv_name_sub
sind nicht auf class App
weitergegeben, wie sie in der Klasse nicht ausgedruckt werden.
Ich habe auch die Methode der Composition wie unten versucht, kann immer noch nicht das Problem lösen:
class Welcome:
def __init__(self, master, csv_name_sub, csv_name_ses):
self.entrySes = Entry(self.master, bg="LemonChiffon3")
self.entrySub=Entry(self.master,bg="LemonChiffon3")
self.csv_name_sub = str(self.entrySub.get())
self.csv_name_ses = str(self.entrySes.get())
class App:
def __init__(self, master, csv_name_ses, csv_name_sub):
self.csv_name_sub = csv_name_sub
self.csv_name_ses = csv_name_ses
self.welcomePage = Welcome(master, csv_name_ses, csv_name_sub)
print('session is', self.welcomePage.csv_name_ses)
print("subject is", self.welcomePage.csv_name_sub)
self.resultFile = open(
"C:\\Users\\xxx + self.welcomePage.csv_name_sub + '_' + self.welcomePage.csv_name_ses +
'_resultsofPart.csv', 'w')
Dank!
Akzeptieren Sie sie als Argumente (es gibt mehrere Methoden) und rufen Sie die Basisklasse auf. Sie möchten auch eine Instanz 'App' * erstellen, die eine Unterklasse von * 'Willkommen' ist - es gibt nur eine * Instanz *, die in einem Unterklassenszenario erstellt wurde und es ist verwirrend, an "an Klasse übergeben" zu denken. Oder ist es vielleicht besser, dass "Willkommen" eine Unterklasse der App ist? Oder vielleicht wäre es einfacher und weniger verwirrend, die Komposition zu verwenden? – user2864740
Danke für Ihren Kommentar und Vorschlag. Ich habe versucht, Komposition zu verwenden, kann aber die Variablen in der Unterklasse immer noch nicht verwenden. Ich habe in der Frage auf den neuesten Stand gebracht, würdest du es mir bitte ansehen? Danke – Kay