这是我的代码:
#!/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()
每次运行代码时,它都会立即打开所有窗口,而不是当用户按下按钮时...任何帮助都将非常感谢......
答案 0 :(得分:1)
这是因为你正在调用函数,而不是传递引用,或者使用lambda函数。
f = Button(win, text=a, command=lambda d=d: openWindowR(str(d)))
然而,这只是一个漫步。您应该考虑在程序中使用类而不是全局变量和函数(使代码更清晰,更有条理!)。
除了这个建议,你要创建两个Tk实例。如果您需要创建一个新窗口,请使用Toplevel小部件,但Tkinter程序应该只有一个Tk元素。如果没有,它可能会导致意外问题。
这与使用名为Application
的类完全相同,您可以使用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()