【问题标题】:How to transfer information between classes of windows in tkinter?如何在 tkinter 中的窗口类之间传输信息?
【发布时间】:2020-10-15 21:33:57
【问题描述】:

我想将我在主窗口中的一些用户输入传输到顶层窗口。

到目前为止我有这个:

import tkinter as tk
from tkinter import filedialog

class Level1 :
    def __init__(self, master):
    ## bunch of frames, labels and button instantiations
    ...........
    self.info = filedialog.askopenfilename()
    
    def get_info(self):
        return self.info

    def go_to_level2(self):
        self.level_2 = tk.Toplevel(self.master)
        self.app = Level2(self.level_2)

class Level2: 
    def __init__(self, master):
        self.master = master
        self.frame = tk.Frame(......)
        self.frame.pack()
        self.label1 = tk.Label(self.frame, text = Level1.get_info)
        self.label1.pack()

当我这样做时,它会打印内存的实例或位置,例如 ..Ox.... 有什么想法可以将信息传输到新窗口,还是应该在 level1 内实例化 level2?

编辑:显示未打印(如在 tk.Label 中)

Edit2:这是解决方案:

import tkinter as tk
from tkinter import filedialog

class Level1 :
    def __init__(self, master):
    ## bunch of frames, labels and button instantiations
    ...........
    self.info = filedialog.askopenfilename()
    
    def get_info(self):
        return self.info

    def go_to_level2(self):
        self.level_2 = tk.Toplevel(self.master)
        self.app = Level2(self.level_2, self)

class Level2: 
    def __init__(self, master, level1):
        self.master = master
        self.frame = tk.Frame(......)
        self.frame.pack()
        self.label1 = tk.Label(self.frame, text = level1.get_info())
        self.label1.pack()

【问题讨论】:

  • 您发布的代码中没有prints,因此无法说明为什么会得到您所做的输出。一般来说,您只需将其他参数传递给Level2__init__() 以使其能够访问它需要的Level1 中的任何内容——这可能是Level1self,或者更具体的东西。
  • 我们如何传递另一个类的自我?不是每个班级都有自己的自己吗?并且只能访问自己的自己?
  • 没有什么能阻止您将self 作为参数传递。如果Level2 存储了该参数,也许是self.level1,那么它可以执行self.level1.get_info() 之类的操作来调用其他类的方法。

标签: python oop tkinter


【解决方案1】:

最常见的解决方案是将带有数据的类的实例传递给需要数据的类。

class Level1 :
    ...
    def go_to_level2(self):
        ...
        self.app = Level2(self.level_2, self)
        ...

class Level2:
    def __init__(self, master, level1):
        ...
        self.label1 = tk.Label(self.frame, text = level1.get_info())
        ...

【讨论】:

  • 没关系,只需稍作修改即可使用:text = level1.get_info() 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 2023-03-21
  • 2014-01-05
  • 1970-01-01
相关资源
最近更新 更多