Pergunta

Como você invocar um event tkinter a partir de um objeto separado?

Eu estou procurando algo como wxWidgets wx.CallAfter. Por exemplo, Se eu criar um objeto, e passar para ele o meu exemplo Tk raiz, e em seguida, tentar chamar um método de que a janela raiz do meu objeto, meu aplicativo trava.

O melhor que posso dar é usar o método do after e verificar o status do meu objeto separado, mas que parece um desperdício.

Foi útil?

Solução

Para responder à sua pergunta específica de "Como você invocar um evento TkInter a partir de um objeto separado", use o comando event_generate. Ele permite que você injetar eventos na fila de eventos da janela de raiz. Combinado com o poderoso mecanismo de evento virtual de Tk torna-se um mecanismo de passagem de mensagens acessível.

Por exemplo:

from tkinter import *

def doFoo(*args):
    print("Hello, world")

root = Tk()
root.bind("<<Foo>>", doFoo)

# some time later, inject the "<<Foo>>" virtual event at the
# tail of the event queue
root.event_generate("<<Foo>>", when="tail")

Note que a chamada event_generate retornará imediatamente. Não está claro se é isso que você quer ou não. De um modo geral você não quer um programa de evento com base bloquear à espera de uma resposta a um evento específico, porque ele vai congelar a GUI .

Eu não tenho certeza se isso resolve o seu problema embora; sem ver seu código eu não tenho certeza qual é seu problema real é. I pode, por exemplo, métodos de acesso de raiz no construtor de um objecto onde a raiz é passado sem a aplicação de travamento para cima. Isso me diz que há algo mais acontecendo em seu código.

Aqui está um exemplo de métodos de acesso com sucesso em uma janela raiz de algum outro objeto:

from tkinter import *

class myClass:
    def __init__(self, root):
        print("root background is %s" % root.cget("background"))

root = Tk()
newObj = myClass(root)

Outras dicas

Aqui abaixo apenas algumas doc e link para entender melhor a resposta de Bryan acima.

função de descrição de New Mexico Tech :

w.event_generate(sequence, **kw)

Este método faz com que um evento para acionar sem qualquer estímulo externo. A manipulação do evento é o mesmo que se tivesse sido desencadeada por um estímulo externo. O argumento seqüência descreve o evento a ser acionado. Você pode definir valores para os campos selecionados no objeto do evento, fornecendo palavra-chave = argumentos de valor, onde a palavra-chave especifica o nome de um campo no objeto do evento.

lista e descrição do TCL / TK evento atributos aqui

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top