Reputation: 11
Here is my code:
#!/usr/bin/python
from Tkinter import *
def openWindowReasons():
global win
win = Tk()
win.title("Decem Rationes Computerum Programmandorum")
buttonMaker("I", 1, 1, " I) Programmo computeres ne meus animus deceat ignavus." ) #create buttons 1-10
buttonMaker("II", 2, 1, " II) Programmo computeres ut relaxem post scholam et gaudeam scholam esse perfectam.")
buttonMaker("III", 3, 1, " III) Meo amico programmato programmo ut certem cum eo.")
buttonMaker("IV", 4, 1, " IV) Alii homines qui boni porgrammi programmant ut facian pecuniam.")
buttonMaker("V", 5, 1, " V) Alii homines scribunt tantam codem ut alii cogitent eos esse optimos.")
buttonMaker("VI", 1, 3, " VI) Programmare est tam iocus ut sperem me programmaturum esse saepius.")
buttonMaker("VII", 2, 3, " VII) Multi homines programmant tam ut non habent tempus faciendorum pensorum quod sunt quam insulso.")
buttonMaker("VIII", 3, 3, " VIII) Programmo ut possim loqui de eo cum meis amicis.")
buttonMaker("IX", 4, 3, " IX) Me inspirato ab caeteris programmo ut sim similaris eis.")
buttonMaker("X", 5, 3, " X) Saepe programmo ne habeam audire mea matri quae dictit quam multa.")
label_1 = Label(win, text="RATIONES")
label_1.grid(row=3, column=2)
def buttonMaker(a, b, c, d):
f = "button" + a
f= Button(win, text=a, commmand=openWindowR(str(d)))
f.grid(row=int(b), column=int(c))
def openWindowR(d):
newWin = Tk()
newWin.title(str(d))
g = "label" + d
g = Label(newWin, text=str(d))
g.grid(row=3, column=3)
def openWindowAlt():
newWin_1 = Toplevel()
label_2 = Label(newWin_1, text="Magister Bartoloma tam sapiens ut Minerva, quae dea sapientae est, eum admiretur.")
root = Tk() #create parent window
root.title("Main Page")
label = Label(root, text="Decem Rationes Computerum Programmandorum")
label.grid(row=1, column=2)
button = Button(root, text="Decem Rationes", commmand=openWindowReasons())
button.grid(row=3, column=3)
button_1= Button(root, text="Pleasant Alternative", commmand=openWindowAlt())
button_1.grid(row=3, column=1)
root.mainloop()
Every time I run the code it opens all the windows at once instead of when the user presses the buttons...any help would be greatly appreciated...
Upvotes: 0
Views: 150
Reputation: 20679
It is because you are calling the functions, instead of passing the reference, or using a lambda function.
f = Button(win, text=a, command=lambda d=d: openWindowR(str(d)))
However, this is only a walkaround. You should consider using classes in your program instead of global variables and functions (making your code much cleaner and organized!).
Apart from this suggestion, you are creating two Tk instances. If you need to create a new window, use a Toplevel widget, but Tkinter programs should have only one Tk element. If not, it can lead you to unexpected problems.
This is exactly the same implementation using a class, called Application
, where you have all the functionality of your GUI.
#!/usr/bin/python
from Tkinter import *
class Application:
def __init__(self, master):
self.master = master
self.master.title("Main Page")
self.label = Label(master, text="Decem Rationes Computerum Programmandorum")
self.label.grid(row=1, column=2)
self.button = Button(master, text="Decem Rationes", command=self.openWindowReasons)
self.button.grid(row=3, column=3)
self.button_1= Button(master, text="Pleasant Alternative", command=self.openWindowAlt)
self.button_1.grid(row=3, column=1)
def openWindowAlt(self):
newWin_1 = Toplevel()
label_2 = Label(newWin_1, text="Magister Bartoloma tam sapiens ut Minerva, quae dea sapientae est, eum admiretur.")
label_2.pack()
def openWindowReasons(self):
self.toplevel = Toplevel()
self.buttonMaker("I", 1, 1, " I) Programmo computeres ne meus animus deceat ignavus." )
self.buttonMaker("II", 2, 1, " II) Programmo computeres ut relaxem post scholam et gaudeam scholam esse perfectam.")
self.buttonMaker("III", 3, 1, " III) Meo amico programmato programmo ut certem cum eo.")
self.buttonMaker("IV", 4, 1, " IV) Alii homines qui boni porgrammi programmant ut facian pecuniam.")
self.buttonMaker("V", 5, 1, " V) Alii homines scribunt tantam codem ut alii cogitent eos esse optimos.")
self.buttonMaker("VI", 1, 3, " VI) Programmare est tam iocus ut sperem me programmaturum esse saepius.")
self.buttonMaker("VII", 2, 3, " VII) Multi homines programmant tam ut non habent tempus faciendorum pensorum quod sunt quam insulso.")
self.buttonMaker("VIII", 3, 3, " VIII) Programmo ut possim loqui de eo cum meis amicis.")
self.buttonMaker("IX", 4, 3, " IX) Me inspirato ab caeteris programmo ut sim similaris eis.")
self.buttonMaker("X", 5, 3, " X) Saepe programmo ne habeam audire mea matri quae dictit quam multa.")
label_1 = Label(self.toplevel, text="RATIONES")
label_1.grid(row=3, column=2)
def buttonMaker(self, a, b, c, d):
f = Button(self.toplevel, text="button" + a, command=lambda d=d: self.openWindowR(str(d)))
f.grid(row=int(b), column=int(c))
def openWindowR(self, d):
newWin = Toplevel()
newWin.title(str(d))
g = Label(newWin, text="label" + d)
g.grid()
root = Tk()
app = Application(root)
root.mainloop()
Upvotes: 1