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

Ned*_*vić 1 python user-interface tkinter

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

在此输入图像描述

重复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)
Run Code Online (Sandbox Code Playgroud)

然后通过for 循环填充 GUI。 这在Python中可能吗?我确实在网上找不到解决此类问题的任何内容。提前致谢!

Bry*_*ley 5

创建自定义小部件的最常见和最简单的方法是首先创建一个继承自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()
Run Code Online (Sandbox Code Playgroud)

截屏