有没有办法在 Python Tkinter 中创建 GUI 组件?

Is there a way to create GUI component in Python Tkinter?

我正在使用 Tkinter 在 Python 中编写 GUI,我遇到了一些困难。我有这个可重复的片段:

重复8次

我想创建 class 或以下结构:

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 循环填充 GUI。 这在 python 中可能吗? 对于此类问题,我真的在网上找不到任何东西。 提前致谢!

创建自定义小部件的最常见和最简单的方法是从创建继承自 FrameLabelFrame 的 class 开始。在 class 里面放任何你想要的东西。然后,您可以像使用任何其他小部件一样使用该 class。

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()