ウィンドウにカスタムタイトルを追加しようとしていますが、問題があります。私のコードが正しくないことは知っていますが、実行すると、代わりに2つのウィンドウが作成されます。 tkウィンドウのタイトルが「Simple Prog」になるようにするには、新しい追加ウィンドウを作成するのではなく、どうすればよいですか。私は完全なコードにそれがあるとエラーがあるので、私はTk()部分を持つとは思わない
from tkinter import Tk, Button, Frame, Entry, END
class ABC(Frame):
def __init__(self,parent=None):
Frame.__init__(self,parent)
self.parent = parent
self.pack()
ABC.make_widgets(self)
def make_widgets(self):
self.root = Tk()
self.root.title("Simple Prog")
ルートウィンドウを作成しない場合、他のウィジェットを作成しようとすると、Tkinterはルートウィンドウを作成します。したがって、___init__
_では、フレームを初期化するときにルートウィンドウをまだ作成していないため、Tkinterが作成します。次に、_make_widgets
_を呼び出して、secondルートウィンドウを作成します。そのため、2つのウィンドウが表示されます。
よく書かれたTkinterプログラムは、他のウィジェットを作成する前に、常に明示的にルートウィンドウを作成する必要があります。
ルートウィンドウを明示的に作成するようにコードを変更すると、予想されるタイトルのウィンドウが1つ表示されます。
例:
_from tkinter import Tk, Button, Frame, Entry, END
class ABC(Frame):
def __init__(self,parent=None):
Frame.__init__(self,parent)
self.parent = parent
self.pack()
self.make_widgets()
def make_widgets(self):
# don't assume that self.parent is a root window.
# instead, call `winfo_toplevel to get the root window
self.winfo_toplevel().title("Simple Prog")
# this adds something to the frame, otherwise the default
# size of the window will be very small
label = Entry(self)
label.pack(side="top", fill="x")
root = Tk()
abc = ABC(root)
root.mainloop()
_
また、self.make_widgets()
ではなくABC.make_widgets(self)
を使用することに注意してください。両方とも同じことをすることになりますが、前者は関数を呼び出す適切な方法です。
私が正しいかどうかはわかりませんが、これはあなたが望むものですか?
root = tkinter.Tk()
root.title('My Title')
ルートは作成するウィンドウであり、残りは自明です。
次のようなものを試してください:
from tkinter import Tk, Button, Frame, Entry, END
class ABC(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
root = Tk()
app = ABC(master=root)
app.master.title("Simple Prog")
app.mainloop()
root.destroy()
これで、タイトル付きのフレームができました。その後、必要に応じて、異なるウィジェット用のウィンドウを追加できます。
自分でこれを行ったので、次のようにできます。
from tkinter import Tk, Button, Frame, Entry, END
class ABC(Frame):
def __init__(self, parent=None):
Frame.__init__(self, parent)
self.parent = parent
self.pack()
ABC.make_widgets(self)
def make_widgets(self):
self.parent.title("Simple Prog")
タイトルが変更され、2つのウィンドウが表示されなくなります。 pythonライブラリドキュメント)のTkinter参照資料のように、parent
をmaster
のままにしました。
2つのウィンドウが開いているという問題にぶつかり、この質問に出くわした場合。これが私が解決策に出会った方法です。
この質問のコードが2つのウィンドウを生成している理由は、
Frame.__init__(self, parent)
前に実行されています
self.root = Tk()
簡単な修正は、Frame .__ init_()を実行する前にTk()を実行することです
self.root = Tk()
Frame.__init__(self, parent)
なぜそうなのか、完全にはわかりません。
self.parentは実際のウィンドウへの参照なので、self.root.titleはself.parent.titleである必要があり、self.rootは存在しないはずです。
widget.winfo_toplevel().title("My_Title")
Tk
が子であるToplevel
またはwidget
インスタンスのタイトルを変更します。