0

Python で 2 つの関数を作成しています。

  • 新しいウィンドウを開くもの: new_window()
  • その上にボタンを作成する別のもの: create_buttons('text displayed')

それらを起動すると、new_window は正常に動作しますが、create_button は [「ボタン」コマンドを呼び出せません: アプリケーションが破棄されました] をマスター ウィンドウが破棄されたかのように表示します... しかし、私のウィンドウはまだ開いています。

...何かわかりますか??

import Tkinter

from Tkinter import *

def new_window():

   master = Tk()

def create_buttons(display):

   new_button= Button(master, text=display)

   new_button.pack()

new_window() ### OK, CREATES A WINDOW

create_buttons('text') ### DISPLAYS FOLLOWING BUG :

create_buttons('text')

TclError                                  Traceback (most recent call last)

/neurospin/grip/protocols/MRI/childrenDTIreading_Letarnec_2011/tools/data_mysql/<ipython console> in <module>()

/neurospin/grip/protocols/MRI/childrenDTIreading_Letarnec_2011/tools/data_mysql/<ipython console> in create_buttons(display)

/usr/lib/python2.6/lib-tk/Tkinter.pyc in __init__(self, master, cnf, **kw)
   2003             overrelief, state, width
   2004         """
-> 2005         Widget.__init__(self, master, 'button', cnf, kw)
   2006 
   2007     def tkButtonEnter(self, *dummy):

/usr/lib/python2.6/lib-tk/Tkinter.pyc in __init__(self, master, widgetName, cnf, kw, extra)
   1933                 del cnf[k]
   1934         self.tk.call(
-> 1935             (widgetName, self._w) + extra + self._options(cnf))
   1936         for k, v in classes:
   1937             k.configure(self, v)

TclError: can't invoke "button" command:  application has been destroyed
4

1 に答える 1

1

JFSebastianが言ったようmasterに、ボタンが作成された場所で変数を使用できるようにする必要があります。これを行うコードは次のようになります。

from Tkinter import *

def new_window():
   return Tk()

def create_buttons(master, display):
   new_button = Button(master, text=display)
   new_button.pack()

master = new_window()
create_buttons(master, 'text')

それはきれいではありませんが、少しいじるには十分なはずです。コードが深刻になる場合は、新しいウィンドウとそのボタンを独自のクラスにラップすることをお勧めします。

于 2013-02-07T11:39:02.150 に答える