python - 如何将值传递给 tkinter 页面?
问题描述
我一直在关注 Sentdex 的播放列表“GUI's with Tkinter (Intermediate)”,但我不知道如何向页面提供信息。这是我到目前为止所拥有的
class Project(tk.Tk):
def init(self, *args, **kwargs):
tk.Tk.init(self, *args, *kwargs)
tk.Tk.wm_title(self, "Project")
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (HomePage,PageOne, PageTwo):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(HomePage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class PageTwo:
def __init__(self,parent,controller,name):
tk.Frame.__init__(self,parent)
self.name=name
label = tk.Label(self, text=self.name, font=LARGE_FONT)
label.pack(pady=10, padx=10)
button = ttk.Button(self, text="Back to Team Page", command=lambda: controller.show_frame(HomePage))
button.pack()
PageTwo 类需要在其上命名,但我不断收到 KeyError
frame = self.frames[cont]
KeyError: <__main__.Page2 object .!frame.!page2>
我能做些什么来解决这个问题?
解决方案
您复制的代码并非旨在在创建时向每个页面传递不同的信息。该代码旨在要求页面在构建页面时都采用完全相同的参数。
话虽如此,改变页面的构造方式是微不足道的。
首先删除此代码:
self.frames = {}
for F in (HomePage,PageOne, PageTwo):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
然后,在其位置添加此代码:
self.frames = {
HomePage: HomePage(container, self),
PageOne: PageOne(container, self),
PageTwo: PageTwo(container, self, name="the name"),
}
self.frames[HomePage].grid(row=0, column=0, sticky="nsew")
self.frames[PageOne].grid(row=0, column=0, sticky="nsew")
self.frames[PageTwo].grid(row=0, column=0, sticky="nsew")
该教程中的代码是从 stackoverflow 上的答案复制而来的。他在解释代码的工作原理方面做得很差,并且它产生了许多问题,这些问题最终回到了 StackOverflow 上。原始代码绝对不是为刚开始使用 tkinter 的人设计的。
要查看原始代码的修改版本以及有关该代码的其他问题的链接,请参阅此答案:https ://stackoverflow.com/a/7557028/7432
推荐阅读
- java - 分配给值时Java返回值返回null
- mathcad - 具有组合参数的函数
- python - 使用python为特定年份生成空行
- python - beautifulsoup 只在标签内直接获取字符串
- google-cloud-platform - 在 GCP 中获取项目组织列表
- authentication - 无法在多租户应用程序(Blazor 服务器应用程序/OpenIDConnect/Azure 应用程序服务)中限制身份验证颁发者
- classification - 可以使用交叉熵损失来比较模型在数据集的不同部分上的执行情况吗?
- ruby-on-rails - Docker 容器中的 Ruby on Rails 应用程序 docker compose build 错误
- javascript - javaScript中是否有任何系统可以使用每个不同的按钮或图标复制不同的多个“输入字段”?
- java - Java - 获取 KeyStore 中刚刚加载的条目的别名