2

GUIを介してユーザー入力を取得するために、3つの異なるファイルに3つのクラスがあります

#file1
class GetInfo1():
    def getInfo1():
        #my code
        return info1
#file2
 class GetInfo2():
    def getInfo2():
        #my code
        return info2
 #file3
 class GetInfo3():
    def getInfo3():
        #my code
        return info3

これらのメソッドを別のファイルから呼び出すと、Getinformation.py そのファイルは

from GetInfo1 import *
from GetInfo2 import *
from GetInfo3 import *

object1 = GetInfo1()
getInfor1 = object1.getInfo1()
print getInfor1

object2 = GetInfo2()
getInfor2 = object2.getInfo2()
print getInfor2

object3 = GetInfo3()
getInfor3 = object3.getInfo3()
print getInfor3

クラスは次のとおりです。

from Tkinter import *

root = Tk()
app = Frame(root)

entry = Entry(app)
entry.grid()


class GetInfo1():

def OnClick(self):
    global input1
    input1 = entry.get()
    #print ("You have entered %s"%input1)
    root.destroy()
    return input1

def getInfo1(self):

    '''Window'''
    global input1
    root.title("Input Permutation Range ")
    root.geometry("300x200")
    app.grid()
    label = Label (app, text="Please Enter the propogation range ( 2 - 4)")
    label.grid()

    '''Button'''
    Object2 = AskPermutationRange()
    button = Button (app, text="Submit", command=Object2.OnClick)
    button.grid()
    root.focus_set()
    root.mainloop()
    return input1

指定されたとおりgetInfor1に取得しgetInfor2ていますが、3番目のオブジェクトの実行中にエラーが発生 _tkinter.TclError: can't invoke "wm" command: application has been destroyed しました。どうすればアプリを再度呼び出すことができますか。前もって感謝します

4

1 に答える 1

6

このメッセージは、ルート ウィンドウを破棄した後で、"wm" コマンド (例: wm_title、wm_geometry、その他いくつか) のいずれかを呼び出していることを意味します。(注: 「geometry」と「title」は、「wm_geometry」と「wm_title」への単純なショートカットです)。

非常に珍しい方法で tkinter を使用しています。Tkinter は、Tk の単一のインスタンスを作成し、mainloop を 1 回だけ呼び出すように設計されています。アプリケーションの過程で Tkinter を複数回停止および開始する必要がある理由はありますか? いくつかのモーダル ダイアログをポップアップして、ユーザーがデータを入力するのを待つだけでよい場合は、毎回 Tk の新しいインスタンスを作成しなくても実行できます。

于 2013-10-15T10:58:44.370 に答える