Tkinter OOP 不止一个条目

Tkinter OOP More than one Entry

因此,我决定改进我的课程作业应用程序以将 OOP 用于 Tkinter,但出现了一个问题。

我在登录屏幕上使用了 4 个条目,2 个用于登录,2 个用于注册——每一面都是用户名和密码。

我在这里遇到的问题:

这是我的 OOP class:

class windowGen:
    def __init__(self, master, title, geometry, background):
        self.master = master
        self.title = title
        self.geometry = geometry
        self.background = background
        master.title(title)
        master.geometry(geometry)
        master.configure(bg=background)
    def createLabel(self, master, contents, fgcolor, bgcolor, horizontal, vertical):
        self.label = Label(master, text=contents, justify=LEFT, fg=fgcolor, bg=bgcolor, font="TkFixedFont")
        self.label.place(x=horizontal, y=vertical)
    def getEntry(self):
        return self.entry.get()
    def exitWindow(self):
        self.master.destroy()
    def createEntry(self, master, horizontal, vertical):
        self.entry = Entry(master)
        self.entry.place(x=horizontal,y=vertical)

现在,问题是createEntry 和getEntry。当每个 window 只有 1 个条目时,这些工作完美,但现在我有 4 个。当我只使用 self.entry 时如何管理 4 个条目?

TL;DR:当 window 上有多个条目框时,如何使用 OOP Tkinter 管理条目?

写于Python3.9.0,最新版TK和Tcl。

您可以使用字典来存储使用唯一名称作为键的创建条目:

class windowGen:
    def __init__(self, master, title, geometry, background):
        self.master = master
        self.title = title
        self.geometry = geometry
        self.background = background
        master.title(title)
        master.geometry(geometry)
        master.configure(bg=background)
        self.entries = {}  # dictionary to store the entries
    def createLabel(self, master, contents, fgcolor, bgcolor, horizontal, vertical):
        self.label = Label(master, text=contents, justify=LEFT, fg=fgcolor, bg=bgcolor, font="TkFixedFont")
        self.label.place(x=horizontal, y=vertical)
    def getEntry(self, name): # get value of entry specified by name
        return self.entries[name].get()
    def exitWindow(self):
        self.master.destroy()
    def createEntry(self, master, horizontal, vertical, name=None):
        entry = Entry(master)
        entry.place(x=horizontal,y=vertical)
        name = name or str(entry)  # use passed name or tkinter internal name
        self.entries[name] = entry
        return name  # return the name as the entry ID

然后您可以使用名称访问条目,如下所示:

root = Tk()
gen = windowGen(root, "title", "400x200", "gold")
e1 = gen.createEntry(root, 10, 10)
...
gen.getEntry(e1)