Python Tkinter Проверьте, существует ли Frame - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь сделать следующее:

  1. Создать приложение Tkinter с меню «Файл».
  2. В меню «Файл» есть 2 параметра: «Добавить» и «Просмотреть».
  3. Параметр «Добавить» добавляет фрейм, а затем добавляет в него виджет «Метка» (метка 1).
  4. Если я затем выберу опцию «Вид» в меню «Файл», она должна распечатать, существует ли уже виджет «Рамка».

Ниже приводится моя попытка, но я получаюошибка

AttributeError: у объекта 'Test' нет атрибута 'tk'

, когда я выбираю опцию View, может кто-нибудь помочь подсказать, что мне здесь не хватает?

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 голосов
/ 23 декабря 2018

Я повторил вашу проблему.Я получил приведенный ниже код для работы с Python3.4 в Linux.е должен стать сам.Я назвал это 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...