私はPythonTkinterでこのアプリケーションを持っています。メインメニューであるPythonファイルがあります。メインメニューのオプションをクリックすると、新しいウィンドウを作成するコードを含むPythonファイルがインポートされます(Toplevel
何らかの理由で新しいウィンドウに使用できませんでした)。したがって、メインメニューを閉じると、他のすべてのウィンドウが閉じるはずです。
メインメニューのコードは次のとおりです。
from tkinter import *
root = Tk()
root.geometry("600x600")
def newWindowImport():
import file1
def newWindowImport2():
import file2
newWindow = Button(text="new window", command=newWindowImport).pack()
newWindow2 = Button(text="new window", command=newWindowImport2).pack()
# Here is there a way so that when I exit it destroys the Main Menu as well as the opened windows
exitBtn = Button(text="Exit", command=root.destroy())
root.mainloop()
このroot.destroy
方法を試しましたが、メインメニューのみが破壊され、すべてのウィンドウが破壊されるわけではありません。メインメニューを終了すると、開いているウィンドウだけでなくメインメニューも破棄する方法はありますか?使用する場合Toplevel
-別のファイルでどのように使用しますか?
他のスクリプトにはTk()
、独自のインスタンスがあり、mainloop()
関数の下にないことを前提としています。その場合は、ファイル内のすべてのコードを関数の下に置くことができToplevel()
、たとえば、次のfile1
ようになります。
def something():
window=Toplevel()
#Rest of the code
そして同様にfile2
、その後あなたのメインプログラムであなたはこのようなことをすることができます
from tkinter import *
import file1, file2
root = Tk()
root.geometry("600x600")
def newWindowImport():
file1.something()
def newWindowImport2():
file2.something()
newWindow = Button(text="new window", command=newWindowImport)
newWindow.pack()
newWindow2 = Button(text="new window", command=newWindowImport2)
newWindow2.pack()
# Here is there a way so that when I exit it destroys the Main Menu as well as the opened windows
exitBtn = Button(text="Exit", command=root.destroy)
root.mainloop()
関数を手放し、これらの変更を加えて短くすることもできます
newWindow = Button(text="new window", command=file1.something)
newWindow.pack()
newWindow2 = Button(text="new window", command=file2.something)
newWindow2.pack()
アプローチが機能しない理由は、各ファイルに独自のファイルがあるため、メインコードmainloop()
を呼び出しroot.destroy
たときにファイルを破棄できなかったためです。
また、括弧を削除したことにも注意してください。括弧()
はcommand=root.destroy
、プログラムが初期化されるとすぐに呼び出されます。
編集:コメントで@martineauによっても示唆されているよう.pack()
に、Button
インスタンスNone
に戻り値である値を保持させるのではなく、プログラムの後半でインスタンスを使用する際の柔軟性が高まるため、インスタンスを個別に使用することをお勧めします.pack()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加