Tkinter で同じウィジェットを持つ複数のフレームを作成するにはどうすればよいですか? 基本的に、私がやりたいことは、画像に示されている同じウィジェットをすべて含む複数のフレームのセットの 15 のコピーを作成することです。ユーザー。ラジオ ボタンは、ユーザーが各写真 (前面、背面、上面など) を分類するためのものです。
コードを 15 回コピーするのはあまり効率的ではありません。クラスを使用してフレームを 1 回定義し、新しいフレームごとにコードを再利用できるかどうかを知りたいです。ユーザーが各フレームで何をしたかを追跡し、各フレームのラジオ ボタンとチェック ボックスでの選択を保存する必要があります。ユーザーがすべての写真を分類した後、ボタンをクリックすると、すべての写真が新しい ID で保存され、ラジオ ボタンからの情報が csv ファイルに保存されます。次に、写真の次のバッチが読み込まれ、プロセスが繰り返されます。
フレームの 1 つを作成するために使用したコードの例を含めました。これは、再利用可能にしたいコードです。15回も繰り返したくない。
############################################################################
#FRAME 3
Photo_2 = Frame(master, bg = "white",relief = RIDGE, bd = 2)
Photo_2.grid(column = 2, row = 1, padx=5, pady=5)
Lbl2 = Label(Photo_2,text = 'Frame 3')
Lbl2.grid(row = 0, column = 0, columnspan = 4, pady = 5)
# Check box
varc2 = StringVar()
varc2.set(0)
Check_2 = Checkbutton(Photo_2, variable = varc2, text="Relevant?", command = lambda:Chk_Val(varc2))
Check_2.grid(row = 1,column = 0,columnspan = 4)
# Photo 1
P2 = "Photo_2.jpg"
P2 = Image.open(P2).resize((200, 200), Image.ANTIALIAS)
phot2 = ImageTk.PhotoImage(P2)
panel = Label(Photo_2, image = phot2)
panel.grid(columnspan = 3, column=1)
# Create Multiple Radio Buttons
Rad_Cont = Frame(Photo_2)
Rad_Cont.grid(column = 0, row = 2)
v2 = StringVar()
v2.set("Address")
for text,mode in RADIO:
b = Radiobutton(Rad_Cont, text=text, variable=v2,
value=mode, command = lambda:Rad_Val(v2))
b.pack()
################################################################################
もちろん、同様のオブジェクトを表すクラスを作成することもできます。
あなたが達成しようとしていることを実装する方法は次のとおりです。
import tkinter as tk
class PhotoFrame(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master, bg='white', relief='ridge', bd=2)
self.label_widget()
self.checkbox_widget()
self.photo_widget()
self.radio_widgets()
def label_widget(self):
self.title_label = tk.Frame(self, text='Frame 3') # Or Frame 1, 2 etc.
self.title_label.grid(row=0, column=0, columnspan=4, pady=5)
def checkbox_widget(self):
self.varc = tk.StringVar()
self.varc.set(0)
self.checkbox = tk.Checkbutton(self, variable=self.varc,
text='Relevant?', command=self.Chk_Val)
self.checkbox.grid(row=1, column=0, columnspan=4)
def photo_widget(self):
# ... Your code here
def radio_widgets(self):
# ... Your code here
def Chk_Val(self):
# ... Your code here
残りの部分を自分で学習して理解できるように、完全な解決策を提供することは避けましたが、クラスを使用するという点で、私が何を得ようとしているのかお分かりいただけると思います。これで、このクラスPhotoFrame
は何度でも使用できますが、各フレームを適切に構成する必要があることを理解してください。たとえば、label_widget
セクション内のテキスト属性の割り当てを省略します(すべてのフレームが必要なわけではありません)。タイトルは「フレーム 3」)、メイン プログラム ロジックでは、次のPhotoFrame
ようにオブジェクトの各インスタンスを構成します。
frame1 = PhotoFrame(master)
frame1.title_label.configure(text='Frame 1') # Along with any other configuration
これがすべて役立つことを願っています-クラスに慣れていない場合は、提供されているドキュメントを確認してください。ここに素晴らしい tkinter リファレンスがあります: NMT tkinter
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加