これは私の最初の質問です。私はPythonとこのサイトには初めてです。Pythonでtkinterを使ってトップレベルウィンドウからメインウィンドウを閉じる
私はデータベースとやりとりするアプリケーションを設計しています。 「閉じる」ボタンを追加して、「プログラムを閉じる」という新しいウィンドウを開きたいと思います。 2つのボタン:はいといいえ。いいえをクリックすると、新しいウィンドウが閉じます。 [はい]をクリックすると、両方のウィンドウが閉じます。
私は自分のコードを動作させましたが、それを行うためのより良い、よりスマートな方法があります。
私は "close_window"メソッドに "root.destroy()"と書く必要がありましたが、 "self.master.destroyのようなもので同じ結果を得るよりスマートな方法があると確信しています) "は、すべてのpythonの力を使います。以下のコードの簡略化されたバージョンを示します。
ありがとうございます。
アルフォンソあなたは単にmessagebox
モジュールが提供する標準のダイアログを使用することができ
from tkinter import *
class Window():
def __init__(self, main):
self.main = main
self.b5=Button(self.main, text="Action 1", width=12)
self.b5.grid(row=0, column=1)
self.b5=Button(self.main, text="Action 2", width=12)
self.b5.grid(row=0, column=2)
self.b6=Button(self.main, text="Close", width=12, command=self.new_window)
self.b6.grid(row=0, column=3)
def new_window(self):
self.newWindow = Toplevel(self.main)
self.app = Demo2(self.newWindow)
def close_window(self):
root.destroy()
class Demo2:
def __init__(self, master):
self.master = master
self.frame = Frame(self.master)
self.l1=Label(self.frame, text="Close the program?")
self.l1.grid(row=0, column=0, columnspan=2)
self.b1=Button(self.frame, text="Yes", command=self.yes_com)
self.b1.grid(row=1, column=0)
self.b1=Button(self.frame, text="No", command=self.no_com)
self.b1.grid(row=1, column=1)
self.frame.pack()
def yes_com(self):
self.master.destroy()
Window.close_window(self)
def no_com(self):
self.master.destroy()
def main():
global root
root = Tk()
app = Window(root)
root.mainloop()
if __name__ == '__main__':
main()
おかげ桟橋パオロメッセージボックスモジュールはまさに私が必要としていたものです。私が聞いてみると、 'tkinter import *'を使ってtkinterライブラリ全体をインポートしようとしていると、なぜ 'tkinter import messagebox'が必要ですか?あなたの助けをもう一度ありがとう! – Alfonso
@Alfonso: 'from my_package import *'は 'my_module'のすべてをインポートするのではなく、そのパッケージがエクスポートするものだけをインポートするためです。この場合、 'messagebox'は' tkinter'モジュールが明示的にエクスポートしないので自動的にインポートされないので、手動で行う必要があります。より深い説明をするには、[Why import * and ttk?](http://stackoverflow.com/questions/24725920/why-import-and-then-ttk#24728212)を参照してください。その場合、モジュールは 'messagebox'の代わりに' ttk'です。 –
あなたの答えをありがとう! – Alfonso