2013-05-04 125 views
0

这里开幕式是我的代码:窗口中的Tkinter

#!/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() 

我每次运行它打开所有的窗户在一次,而当用户按下按钮的代码...任何帮助将是非常感谢...

回答

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() 
+0

感谢,你能告诉我,我怎么会合并类到它 – user2350801 2013-05-04 22:08:50

+0

还,怎么会是如何变化的职能的工作? – user2350801 2013-05-04 22:12:19

+0

@unubtu我看了你的答案片刻,如果没有删除,我会upvote它!我认为它比我更清楚地解释了这个问题。 – 2013-05-04 22:14:27