この例のように2つのフレームにウィジェットを表示したtkinterアプリケーションを作成しました。このアプリケーションは正常に動作します。tkinterにノートブックタブを追加する - クラスベースの構造を使ってノートブックタブを作成するにはどうすればいいですか? (Python 3)
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("Example")
notebook = ttk.Notebook(root)
frame1 = ttk.Frame(notebook)
frame2 = ttk.Frame(notebook)
notebook.add(frame1, text="Frame One")
notebook.add(frame2, text="Frame Two")
notebook.pack()
#(The labels are examples, but the rest of the code is identical in structure).
labelA = ttk.Label(frame1, text = "This is on Frame One")
labelA.grid(column=1, row=1)
labelB = ttk.Label(frame2, text = "This is on Frame Two")
labelB.grid(column=1, row=1)
root.mainloop()
私はクラスを使用するようにプログラムを再構成しようとすることに決めました(これはあまりよく知られていません)。しかし、ウィジェットが別のフレームに表示されるようにするにはどうすればよいか分かりません(他のすべては問題ありません)。たとえば、次の例では "TypeError:init()は1から2の位置引数をとりますが、3つは与えられます。"だからおそらく私は余分な引数で初期化する必要があるだろうが、私はノートブックがそれにどのように取り組まれているのか、それが私が取るべきアプローチでさえあるのか分からない。 ( "frame1"と "frame2"引数がラベルから削除された場合、プログラムは実行されますが、両方のフレームに同じものが表示されます)。
from tkinter import *
from tkinter import ttk
class MainApplication(ttk.Frame):
def __init__(self, parent):
ttk.Frame.__init__(self, parent)
self.labelA = ttk.Label(self, frame1, text = "This is on Frame One")
self.labelA.grid(column=1, row=1)
self.labelB = ttk.Label(self, frame2, text = "This is on Frame Two")
self.labelB.grid(column=1, row=1)
root = Tk()
root.title("Example")
notebook = ttk.Notebook(root)
frame1 = ttk.Frame(notebook)
frame2 = ttk.Frame(notebook)
notebook.add(frame1, text="Frame One")
notebook.add(frame2, text="Frame Two")
notebook.pack()
MainApplication(root).pack()
root.mainloop()
私は解決策に興味があるんだけど、私はまた、クラスは、スタンドアロンのウィジェットに比べ、異なるやっていることを学ぶことに興味があります。
[mcve]を入力してください。コンテキスト外のコードブロックを表示することはあまり役に立ちません。 –
@Bryan Oakleyは –
を改造しました。私はちょうどあなたが探しているものを正確に記述していると思うyoutubeビデオを見ました。ここにシリーズ[リンク](https://www.youtube.com/watch?v=HjNHATw6XgY&list=PLQVvaaQuDclKx-QpC9wntnURXVJqLyk)へのリンクがあります。私はそれが最初のカップルビデオでカバーされていると思います。この男は本質的にあなたの複数のウィンドウのための複数のタブを作成するクラスを作成します。 – Joe