【问题标题】:trouble switching frames in tkinter在 tkinter 中切换帧时出现问题
【发布时间】:2019-12-30 00:23:44
【问题描述】:

我无法理解如何在 tkinter 中切换帧。

我正在使用在互联网上非常流行的代码,该代码通过将帧一个一个堆叠然后调用它们来切换帧。我无法理解几行代码(带有*** 的代码)

import tkinter as tk
class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__ (self, *args, **kwargs)
        container=tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        self.frames={}
        for F in (a, b, c):***
            page_name=F.__name__***
            frame=F(parent=container, controller=self)
            self.frames[page_name]=frame
            frame.grid(row=0, column=0, sticky="nsew")
        self.show_frame("a")
    def show_frame(self, page_name):
        frame=self.frames[page_name]
        frame.tkraise()

所以我有2个问题,第一个是为什么在for循环中a,b,c写成变量,而不是字符串(当我要显示框架a时,我把“a”写成字符串)。二、__name__在这种情况下是做什么的,有什么必要。

【问题讨论】:

标签: python tkinter


【解决方案1】:

a, b, c 是类,__name__ 以字符串形式提供类的名称 - 所以它会创建字典

 self.frames = { "a": a(), "b": b(), "c": c() }

"class_name_as_string": instance_of_class

show_frame("a") 使用"class_name_as_string" 得到instance_of_class 并显示出来。


你可以跳过__name__ 然后你就会有

 self.frames = {a: a(), b: b(), c: c()}

使用class: instance_of_class,您必须使用show_frame(a) 中的类

【讨论】:

  • 谢谢,我想我知道了,但是我不明白python如何知道a,b,c是类,如果这些类是在类SampleApp类之后定义的(其中for循环是)
  • 这个循环在你创建类 SampleApp 的实例时执行。如果在定义类 a、b、c 之后创建实例,则没有问题。
猜你喜欢
  • 2018-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多