【问题标题】:Python Tkinter Check if Frame existsPython Tkinter 检查框架是否存在
【发布时间】:2019-05-22 11:32:36
【问题描述】:

我正在尝试执行以下操作:

  1. 使用“文件”菜单创建 Tkinter 应用程序。
  2. 文件菜单有 2 个选项,添加和查看。
  3. 添加选项会添加一个框架,然后在框架中添加一个标签小部件(标签 1)。
  4. 如果我随后从文件菜单中选择“查看”选项,它应该会打印出 Frame 小部件是否已经存在。

以下是我的尝试,但我收到错误

AttributeError: 'Test' 对象没有属性 'tk'

当我选择“查看”选项时,有人可以帮忙指出我在这里缺少什么吗?

from tkinter import Tk, Menu, Label, Frame
class Test():
    def __init__(self):
        self.gui = Tk()
        self.gui.geometry("600x400")

        menu = Menu(self.gui)
        new_item1 = Menu(menu)
        menu.add_cascade(label='File', menu=new_item1)
        new_item1.add_command(label='Add', command=self.addlbl)
        new_item1.add_command(label='View', command=self.viewlbl)    

        self.gui.config(menu=menu)
        self.gui.mainloop()

    def addlbl(self):
        f=Frame()
        f.pack()
        lbl1 = Label(f, text="Label 1").grid(row=0, column=0)

    def viewlbl(self):
        print(Frame.winfo_exists(self))      

T=Test() 

【问题讨论】:

  • 你在问self 是否是一个框架以及它是否存在。你为什么这样做? self 显然不是框架,它是 Test 的一个实例。

标签: python-3.x tkinter


【解决方案1】:

我复制了你的问题。我得到了下面的代码,可以在 Linux 上使用 Python3.4。 f 需要成为 self.f。我将其命名为 self.frame。这使得框架可以在创建它的方法之外被访问。

from tkinter import Tk, Menu, Label, Frame
class Test():

def __init__(self):
    self.gui = Tk()
    self.gui.geometry("600x400")
    menu = Menu(self.gui)
    new_item1 = Menu(menu)
    menu.add_cascade(label='File', menu=new_item1)
    new_item1.add_command(label='Add', command=self.addlbl)
    new_item1.add_command(label='View', command=self.viewlbl)    
    self.gui.config(menu=menu)
    self.gui.mainloop()

def addlbl(self):
    self.frame = Frame(self.gui)
    self.frame.pack()
    lbl1 = Label(self.frame, text="Label 1")
    lbl1.grid(row=0, column=0)

def viewlbl(self):
    print('frame exists {}'.format(self.frame.winfo_exists()))


T=Test()

【讨论】:

  • 谢谢你,Oppy,我明白你所指出的并同意这个建议,但我需要知道框架是否存在而不是标签(如果标签存在则间接回答)。
  • 我应该更仔细地阅读您的问题。请在上面找到修改后的答案。我希望这会有所帮助。
猜你喜欢
  • 2011-10-09
  • 1970-01-01
  • 2021-01-07
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多