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)
因此,我决定改进我的课程作业应用程序以将 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)