[英]How do I inherit information from an instance of a class into another instance?
[英]How do I reference my Tkinter "root" instance from within another class?
我正在使用下面的代码创建一个 window 并提高不同的框架。 我需要创建一个顶层,但我试图让顶层 window 出现在主 window 的范围内。 环顾四周,我发现这样做的方法是使用 wm_transient(root)。 问题是我的“根”被称为应用程序,它不能从我调用这些函数的 class 中访问。
因此,我正在调用我的弹出窗口 function,我试图使我的弹出窗口(顶层)具有 wm_transient 的属性,但我必须将 master 设置为 root(我的应用程序中的应用程序)并且无法弄清楚如何使它工作。
所以我的基本问题是如何使顶层出现在我的主要 window 的范围内,但我真正想知道的是如何调用/引用我的根 window。
import tkinter as tk
class APP1(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.title('APP')
self.geometry("552x700")
self.resizable(False, False)
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 = {}
self.frames["MenuPage"] = MenuPage(parent=container, controller=self)
self.frames["MenuPage"].grid(row=0, column=0, sticky="nsew")
self.show_frame("MenuPage")
def show_frame(self, page_name):
frame = self.frames[page_name]
frame.tkraise()
class MenuPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
def popup():
x = tk.Toplevel(self)
x.wm_transient(app)
template = tk.Button(self, text='Popup', height=3, width=20, bg='white', font=('12'), command=lambda: popup())
template.pack(pady=50)
if __name__ == "__main__":
app = APP1()
app.mainloop()
在您的具体示例中,您已经有两种访问“root”的方法。
首先,您的根是app
,即APP1
的实例,它是一个全局变量,因此它已经在任何地方都可用。 它是全局的,因为您在 function 或 class 的上下文之外定义它。
其次,将APP1
的实例作为controller
参数传递到MenuPage
class 中。 您将其保存为self.controller
,因此任何需要APP1
实例的地方都可以使用self.controller
。
有关了解您复制的代码的更多帮助,请参阅在 tkinter 中的两个帧之间切换,其中包含许多有关此代码的问题的链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.