はどのよう は、二つのウィンドウ(app
とapp2
)のみapp.mainloop()
が呼ばれる生産tkinter.Frame
のサブクラスの__init__
にmaster = Tk()
を追加していますか?Tkの2つのインスタンスを1つのメインループで作成するにはどうすればよいですか?
from tkinter import Frame,Button,Tk
class Application(Frame):
def say_hi(self):
print('Hello world?!')
def close(self):
self.master.destroy()
def createWidgets(self):
self.quit_b = Button(self, width=12, text='Quit', bg='tan',
command=self.close)
self.quit_b.grid(row=0, column=0, padx=8, pady=8)
self.hello_b = Button(self, width=12, text='Hello',
command=self.say_hi)
self.hello_b.grid(row=0, column=1, padx=8, pady=8)
def __init__(self):
master = Tk() # <------------------------ ! see here !
Frame.__init__(self, master)
self.grid()
self.createWidgets()
app = Application()
app.master.title('Hello world!')
app2 = Application()
app2.master.title('Hello world! 2')
app.mainloop()
@HonestAbe: 'Application'のコンストラクタに' Tk'のインスタンスを作成し、 'Application'の2つのインスタンスを作成したので、Tkinterの2つのインスタンスが得られます。単にそれを行う理由はなく、予期せぬ結果が出ます(明らかに、起こっていることはあなたが期待するものではないためです)。 –
質問を少しきれいにして、この回答についての私の古いコメントを削除しました。この答えを編集して、「Tkクラスのインスタンスを2つ作成することはできません...」と明記してください。 'app2'の' master = Tk() 'が' app'で作成されたものを置き換えると言っていますか?そして、あなたはなぜapp.mainloop()が両方のために働くのか説明できますか?ありがとう! –
@HonestAbe: 'mainloop'はウィンドウを作成しません。単純なイベントループです。 'Tk()'を呼び出すたびにウィンドウを作成し、tkサブシステムを初期化します。この初期化は、1つのアプリケーションに対して2回行われるようには設計されていません。 –