Tkinter에서 동일한 위젯을 가진 여러 프레임을 어떻게 만들 수 있습니까? 기본적으로 내가 원하는 것은 이미지에 표시된 것과 동일한 위젯을 모두 포함하는 여러 프레임 세트의 사본 15 개를 만드는 것입니다.이 프로그램의 목적은 사용자가 제공 한 특정 ID를 기반으로 사진을 그룹으로 분류하는 데 도움을주는 것입니다. 사용자. 라디오 버튼은 사용자가 각 사진 (예 : 앞, 뒤, 위 등)을 분류 할 수 있도록합니다.
코드를 15 번 복사하는 것은 그다지 효율적이지 않으며 클래스를 사용하여 프레임을 한 번 정의하고 각 새 프레임에 대해 코드를 재사용 할 수 있는지 알고 싶습니다. 사용자가 각 프레임에서 수행하는 작업을 추적하고 각 프레임의 라디오 버튼과 확인란에 선택 사항을 저장해야합니다. 사용자가 모든 사진을 분류 한 후 버튼을 클릭하면 모든 사진이 새 ID로 저장되고 라디오 버튼의 정보도 csv 파일에 저장됩니다. 그런 다음 다음 사진 배치가로드되고 프로세스가 반복됩니다.
프레임 중 하나를 만드는 데 사용한 코드의 예를 포함했습니다. 이것은 재사용 가능하게 만들고 싶은 코드입니다. 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
섹션 에서 텍스트 속성 할당을 생략합니다 (모든 프레임을 원하지는 않습니다). 제목이 'Frame 3')이므로 기본 프로그램 논리에서 다음 PhotoFrame
과 같이 개체 의 각 인스턴스를 구성합니다 .
frame1 = PhotoFrame(master)
frame1.title_label.configure(text='Frame 1') # Along with any other configuration
이 모든 것이 도움이되기를 바랍니다. 클래스에 익숙하지 않은 경우 제공된 문서를 확인하고 여기에 훌륭한 tkinter 참조가 있습니다. NMT tkinter
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다