#python #user-interface #tkinter
Вопрос:
Я пишу графический интерфейс на Python с помощью Tkinter, и у меня возникли некоторые трудности. У меня есть этот повторяющийся сегмент:
Это повторяется 8 раз.
Я хотел бы создать класс или структуру:
frame1 = LabelFrame(root, text="Host 0", padx=5, pady=5) frame1.grid(row=0, column=0) labela1 = Label(frame1, text="ID 21") c1 = Checkbutton(frame1, text="Save images") c1.grid(row=2, column=1, columnspan=2) b11 = Button(frame1, text="Start host") b12 = Button(frame1, text="Start app") b13 = Button(frame1, text="Kill app") b14 = Button(frame1, text="Turn off host") labela1.grid(row=1, column=0) b11.grid(row=1, column=2) b12.grid(row=1, column=3) b13.grid(row=1, column=4) b14.grid(row=1, column=5) labela12 = Label(frame1, text="Status", fg='#00f') labela12.grid(row=2, column=3, columnspan=4)
а затем заполните графический интерфейс через цикл for. Возможно ли это в python? Я действительно не мог найти ничего в Интернете для такого рода проблем. Заранее спасибо!
Комментарии:
1. Создайте новый класс, который наследуется от фрейма (или LabelFrame), и поместите весь свой код в новый класс.
Ответ №1:
Самый распространенный и простой способ создания пользовательского виджета-это начать с создания класса, который наследует от Frame
или LabelFrame
. Поместите в этот класс все, что захотите. Затем вы можете использовать этот класс, как и любой другой виджет.
import tkinter as tk class HostController(tk.LabelFrame): def __init__(self, parent, hostid, title): super().__init__(parent, text=title) self.hostid = hostid labela1 = tk.Label(self, text=f"ID {hostid}") c1 = tk.Checkbutton(self, text="Save images") c1.grid(row=2, column=1, columnspan=2) b11 = tk.Button(self, text="Start host") b12 = tk.Button(self, text="Start app") b13 = tk.Button(self, text="Kill app") b14 = tk.Button(self, text="Turn off host") labela1.grid(row=1, column=0) b11.grid(row=1, column=2) b12.grid(row=1, column=3) b13.grid(row=1, column=4) b14.grid(row=1, column=5) labela12 = tk.Label(self, text="Status", fg='#00f') labela12.grid(row=2, column=3, columnspan=4) root = tk.Tk() for i in range(5): hc = HostController(root, hostid=i, title=f"Host {i}") hc.pack(side="top", padx=4, pady=(0,4)) root.mainloop()
Комментарии:
1. Спасибо вам большое, добрый человек. Хорошего дня! lt;3