0

さて、この長いプログラムがあります。テーマに問題があります。テーマとは、Tkinter でアクティブ化されたときに背景とテキストの色を変更するために構築した特定の関数を意味します。コードの短縮版は次のとおりです。

 global theme
 theme = 0
 windows = []
 buttons = []
 labels = []
messageboxes = []

コード...

    def flavor_0():
    global theme
    for w in windows:
        w.config(bg = 'black')
    for l in labels:
        l.config(bg = 'black', fg = 'white')
    for b in buttons:
        b.config(activebackground = "grey", activeforeground = "white", bg = 'black', fg = 'white')
    for i in listboxes:
        i.config(bg = 'black', fg = 'white', relief = "ridge") 
    theme = 0

その他のコード... (このセクションで他のフレーバーを定義します)

def set_theme():
    global theme
    global register
    if theme == 0:
        flavor_0()
    elif theme == 1:
        flavor_1()
    elif theme == 2:
        flavor_2()
    elif theme == 3:
        flavor_3()
    elif theme == 4:
        flavor_4()

さらに多くのコード

    thememenu = Tkinter.Menu(menubar,tearoff = 0)
    thememenu.add_command(label="Plain",command = flavor_0)
    thememenu.add_command(label="Mint", command = flavor_1)
    thememenu.add_command(label="Strawberry", command = flavor_2)
    thememenu.add_command(label="Banana", command = flavor_3)
    thememenu.add_command(label="Peanut", command = flavor_4)
    menubar.add_cascade(label="Flavor", menu = thememenu)

    def windowinator():
        new = Tkinter.Tk()
        windows.append(new)
        set_theme()

    windowinator = Tkinter.Button(root,text="New Window", command = windowinator)
    windowinator.pack()
    buttons.append(windowinator)

よし、やっと完成。これを実行すると、テーマチェンジャーが機能します。「windowinator」を使用するまで。以前開いていたウィンドウを閉じない限り、問題なくテーマを変更できます。しかし、そのうちの1つだけを閉じて「テーマ」を変更しようとすると、プレーン(テーマのないウィンドウ)とこの厄介なエラーが表示されます:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "C:\Users\Ahmet\Desktop\Fobby\FOBBY.py", line 70, in flavor_3
    w.config(bg = 'black')
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1202, in configure
    return self._configure('configure', cnf, kw)
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1193, in _configure
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
TclError: invalid command name "."

それで、誰が正確に何がうまくいかなかったのか教えてもらえますか?

4

1 に答える 1

1

Tkクラスの単一のインスタンスのみを作成する必要があります。初期のデフォルト ウィンドウ (".") が破棄されているようです。Tkinter は、そのように使用するようには設計されていません。

複数のウィンドウが必要な場合は、 のインスタンスを作成しますToplevel

于 2013-03-08T18:46:40.647 に答える