Dúvidas sobre looping no Tkinter

717 views
Skip to first unread message

Guilherme Matheus

unread,
Jun 11, 2018, 12:01:56 PM6/11/18
to Python Brasil
Bom dia,

Primeiramente gostaria de dizer que sou novo em Python, portanto qualquer ajuda é muito bem vinda.

Então... Estou encontrando problemas para rodar uma função em looping, o meu programa funciona perfeitamente, mas a partir do momento em que chamo a função(através do evento click de um botão) que deve ser executado em looping o programa fica travado, pude perceber que o problema é o looping, pois o programa não consegue atualizar as outras informações por estar "preso"  nesse looping. Preciso que essa função rode até que o usuário aperte um botão de finalizar, e como a minha função se inicia com uma condicional não posso usar o comando "break" para sair do looping. Seguem o código da função que deve rodar em looping, se alguém puder me ajudar, não consegui achar em nenhum lugar uma solução.

def insereal():
    while True:
        global atual
        global ant
        if(atual == GPIO.LOW and ant == GPIO.HIGH):
            global contador
            def insere_alumina (contador):
                return ((int(contador) +1))
            contador=insere_alumina(contador)
            print((contador)*fator)
            exibe = Label(janela, text=(contador * fator), font="century 45", bg="#A9A9A9", fg="white", bd=6).place(x = 480, y = 60, width=300, height=120)
            time.sleep(0.1)
        ant = atual
        atual = GPIO.input(40)

Att, obrigado.

Edson Silva

unread,
Jun 11, 2018, 12:40:18 PM6/11/18
to Python Brasil
    Bom dia, Guilherme!

    Até onde sei o laço 'while True' vai se manter indefinidamente se não for quebrado e não achei em seu código uma condição de parada. Recomendo que deixe o loop para o próprio tkinter (que faz a varredura da tela constantemente, que deixe sua função mudar apenas o estado das saídas ou coloque uma condição de parada no while.

Att

Guilherme Matheus

unread,
Jun 13, 2018, 7:07:05 AM6/13/18
to Python Brasil
Bom dia, Edson!
      
       Eu compreendo que o laço precisa de uma condição de parada, mas no meu projeto essa função é chamada a partir de um botão, e se eu coloco um break no looping vou precisar apertar o botão toda vez q for rodar essa função. Na verdade gostaria de rodar essa função automaticamente, mas não consegui também.

Att

Willie

unread,
Jun 13, 2018, 7:18:50 AM6/13/18
to Python Brasil
Ao invés do while você pode usar a função after (http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/universal.html), ela recebe como argumento um delay em milissegundos e uma função que vai ser executada depois desse delay.
Você consegue criar um while com o after chamando uma função que chama ela mesma várias vezes, algo do tipo:

def minha_funcao(*args):
    <aqui entra o codigo que eu faço dentro do while>
    minha_janela.after(1000, minha_funcao)

minha_funcao()

Thiago Salgado

unread,
Jun 13, 2018, 9:07:50 AM6/13/18
to python...@googlegroups.com
Recomendo que pare de usar o Tkinter, e use o Kivy, te dará mais agilidade para programar e menos estresse com recódigo !


--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasil+unsubscribe@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para python...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/python-brasil/04f0bf68-54cc-44a6-a11d-6176df69a949%40googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

Whoami Taskill

unread,
Feb 17, 2022, 8:34:54 AM2/17/22
to Python Brasil
Você você executar o método update. Por exemplo, digamos que a variável de referência se chame janela = Tk()
Logo antes de executar a função que gerará um looping ou mesmo dentro do loop execute janela.update.
Caso não funcione, acesse ela de forma global. Ex:
def nomedafuncao:
    global janela
    ...
    ...
    janela.update()


Em quarta-feira, 13 de junho de 2018 às 10:07:50 UTC-3, Thiago Salgado escreveu:
Recomendo que pare de usar o Tkinter, e use o Kivy, te dará mais agilidade para programar e menos estresse com recódigo !


2018-06-13 8:18 GMT-03:00 Willie <williel...@gmail.com>:
Ao invés do while você pode usar a função after (http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/universal.html), ela recebe como argumento um delay em milissegundos e uma função que vai ser executada depois desse delay.
Você consegue criar um while com o after chamando uma função que chama ela mesma várias vezes, algo do tipo:

def minha_funcao(*args):
    <aqui entra o codigo que eu faço dentro do while>
    minha_janela.after(1000, minha_funcao)

minha_funcao()

Em quarta-feira, 13 de junho de 2018 08:07:05 UTC-3, Guilherme Matheus escreveu:
Bom dia, Edson!
      
       Eu compreendo que o laço precisa de uma condição de parada, mas no meu projeto essa função é chamada a partir de um botão, e se eu coloco um break no looping vou precisar apertar o botão toda vez q for rodar essa função. Na verdade gostaria de rodar essa função automaticamente, mas não consegui também.

Att

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.

Para postar nesse grupo, envie um e-mail para python...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages