Jump to content
Fórum Script Brasil
  • 0

Estou tentando associar um ítem de array a um objeto de Menu do Tkinter ...


Rhaone da Silva

Question

Olá pessoal ... o erro abaixo acontece porque estou tentando associar um ítem de array a um objeto de Menu do Tkinter ...

Tem alguma forma de isso acontecer ou o Python não tem suporte para isso? ... obrigado ...

Obs.: reduzi o código original para este fórum afim de facilitar o entendimento sendo que o mesmo foi testado também.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Já tentei ...

  exec ("%s = %s" % (objeto, Opcao [0]))
  objeto = locals()[Opcao [0]]
  objeto = globals()[Opcao [0]]

  objeto.add_cascade (label = objeto, menu = result)
  objeto.add_cascade (label = str (objeto), menu = objeto)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$ Traceback (most recent call last):
  File "/home/mint/PYTHON/TESTES/TESTES.PY", line 71, in <module>
    app = My_Root (root)
  File "/home/mint/PYTHON/TESTES/TESTES.PY", line 49, in __init__
    objeto = globals()[Opcao [0]]
KeyError: 'Opcao_0'
^C

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#!/usr/bin/python

from tkinter import *

class My_Root (Frame):

  def __init__ (self, master):

    menubar = Menu (root)
    root.config (menu = menubar)

    self.master = master
    self.root = Toplevel (self.master)
    self.root.title ('Python - RHAONE')
    self.root.geometry ('300x200')

    self.button = Button (self.master, text = 'Exit', command = self.root.quit)
    self.button.place (x = 150, y = 100)

    Opcao = []

    Opcao.append ('Opcao_0')
    Opcao.append ('Opcao_1')
    Opcao.append ('Opcao_2')

    Opcao_0 = Menu (menubar, tearoff = False)
    Opcao_0.add_command (label = ' Opcao_0_Ok', command = root.quit)

    objeto = globals()[Opcao [0]]
    objeto = Menu (menubar, tearoff = False)
    objeto.add_cascade (label = str (objeto), menu = str (objeto))

 

if __name__ == '__main__':

  root = Tk ()
  app = My_Root (root)
  root.mainloop ()

 

Edited by Rhaone da Silva
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

já fiz interfaces com tkinter, mas não tinha menus do tipo cabeçalho que fica no topo.

sempre fiz usando botões, ou o notebook.

mas pela experiencia que tive com tkinter, é que sim, você pode associar objetos ao array, pois o coletor de lixo vai eliminar o objeto se não tiver uma referencia.

o erro no seu codigo esta no uso do globals

se você fizer o print das chaves, vera que o array em questão não faz parte do escopo global

print(globals().keys())

#outros testes que pode exclarecer
print(array in globals())
print(objeto in globals())

a solução para o erro que você tem agora é chamar o objeto direto do array sem usar o globals

objeto = Opcao [0]

acredito que faltou o self no inicio

self.Opcao = []
###
self.objeto = self.Opcao[0]

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.8k
×
×
  • Create New...