0

これが私のコードです:

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

コードを実行するたびに、ユーザーがボタンを押すのではなく、一度にすべてのウィンドウが開きます...どんな助けも大歓迎です...

4

1 に答える 1

1

これは、参照を渡すか、ラムダ関数を使用する代わりに、関数を呼び出しているためです。

f = Button(win, text=a, command=lambda d=d: openWindowR(str(d)))

ただし、これはあくまでも回避策です。グローバル変数と関数の代わりに、プログラムでクラスを使用することを検討する必要があります (コードをよりクリーンで整理します!)。

この提案とは別に、2 つの Tk インスタンスを作成しています。新しいウィンドウを作成する必要がある場合は、トップレベル ウィジェットを使用しますが、Tkinter プログラムには Tk 要素を 1 つだけ含める必要があります。そうしないと、予期しない問題が発生する可能性があります。

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()
于 2013-05-04T22:00:50.357 に答える