【问题标题】:Python Tkinter - how to get informations in a tk.toplevel classPython Tkinter - 如何在 tk.toplevel 类中获取信息
【发布时间】:2021-07-10 17:45:14
【问题描述】:

您好,我在获取 tk.Toplevel 类中的函数或变量时遇到问题,因为他想要一个父级。那么我怎样才能从那个类中获取信息呢?

我有两个 .py 文件:

首先是框架核心:

import tkinter as tk

class Test2(tk.Toplevel): 
    def __init__(self, parent):
        super().__init__(parent)
        #[...]
        self.createwidg()

    def createwidg(self):
        #[...]
        pass
        
    def examplefunction(self):
        #[...]
        return True

class Test1(tk.Tk): 
    def __init__(self):
        super().__init__()
        #[...]
        self.createwidg()

    def createwidg(self):
        #[...]
        pass
        
    def openwindow(self):
        window=Test2(self)
        window.grab_set()

第二个是我将主循环框架并访问这些信息的地方。

那么我怎样才能访问一个函数,examplefunction,它在 tk.Toplevel 但在 tk.Tk 之外?

【问题讨论】:

  • 不清楚您询问的是什么信息。 Test2 似乎没有任何信息。
  • 正如我所说,我需要访问第二类中的函数(examplefunction)但在 tk.Tk 之外
  • 这是你昨天问的同一个问题。 'Python Tkinter - 如何将笔记本类添加到 tk.toplevel?这个问题是我给你的一个稍微重命名的答案! Toplevel 的存在是为了创建子小部件,这就是为什么它需要 Tk 父小部件。

标签: python python-3.x tkinter


【解决方案1】:

这与 tkinter 无关。您需要保存对window 的引用,然后您可以像访问任何其他python 对象一样访问它。

class Test1(tk.Tk):
    ...
    def openwindow(self):
        self.window=Test2(self)
        self.window.grab_set()

    def call_examplefunction(self):
        self.window.examplefunction()

如果您需要在Test1 的范围之外执行此操作,则需要保存对Test1 实例的引用:

test1 = Test1(...)
...
test1.call_examplefunction()

【讨论】:

  • 正如我所说的:我需要在 tk.Tk 类中调用这个函数,而不是在 tk.Tk 类中想象一下创建一个新文件,你也循环 main 并且你想访问这个 tk。顶级函数,但在 tk.Tk 类之外(就像你写的那样)
  • @Diaskyyy:规则是一样的:你需要保留一个参考。如果它在Test1 之外,那么您可以保留对Test1 的引用(例如:test1=Test1(...); ... test1.call_examplefunction()
  • 否,因为该函数在 tk.Toplevel 而不是在 tk.Tk 中,我无法访问它,因为他需要父主控
  • 问题是:如何访问一个 tk.Toplevel 类(他需要父master,没有root不能引用)函数?
  • @Diaskyyy:你没有抓住重点。某些代码必须创建该类的实例。因此,它可以保存对该类的引用并使用它,或将其传递给需要它的其他类。这不是 tkinter 或 Toplevel 小部件所独有的。如果您需要类中的方法,请保存对该类实例的引用,然后在实例上调用该方法。这是 Python 编程的基础。
猜你喜欢
  • 2014-05-21
  • 1970-01-01
  • 2014-07-06
  • 2016-10-09
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 2012-07-18
相关资源
最近更新 更多