I updated this question. I'm creating two windows and trying to pass variables that created in class A to class B. Could you please point out what's the problem in my code please? Here is my method:
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()
The program can be run, but the variables csv_name_ses
and csv_name_sub
are not passed to class App
, as they are not printed out in the class.
I have also tried the method of Composition as below, still can't solve the problem:
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')
In the use of super class
, to inherit var and values from the parent class, the child class need to refer to the parent class, such that Welcome.csv_name_ses
.
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")
writeToFile()
def writeToFile(self):
Welcome.csv_name_sub = str(self.entrySub.get())
Welcome.csv_name_ses = str(self.entrySes.get())
class App(Welcome):
def __init__(self, master, csv_name_ses, csv_name_sub):
Welcome.__init__(self, master, csv_name_ses, csv_name_sub)
self.csv_name_sub = Welcome.csv_name_sub
self.csv_name_ses = Welcome.csv_name_ses #parent.var
def main():
root = Tk()
myApp = Welcome(root, csv_name_ses, csv_name_sub)
root.mainloop()