Python Tkinter检查框架是否存在

时间:2018-12-22 08:37:30

标签: python-3.x tkinter

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

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

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

  

AttributeError:“测试”对象没有属性“ 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() 

1 个答案:

答案 0 :(得分:1)

我复制了您的问题。我得到了下面的代码,可以在Linux上使用Python3.4进行工作。 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()