elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Tkinter, inhabilitar widgets mientras procesa el script [PYTHON]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Tkinter, inhabilitar widgets mientras procesa el script [PYTHON]  (Leído 3,731 veces)
Yidu

Desconectado Desconectado

Mensajes: 133


Ver Perfil
Tkinter, inhabilitar widgets mientras procesa el script [PYTHON]
« en: 30 Diciembre 2017, 19:19 pm »

Hola de nuevo!

He leído algo sobre el uso de while con tkinter. Osea, que no se llevan muy bien. Por el tema que se congela la GUI. Aunque también ocurre cuando se realizan cálculos que tardan.

Me he informado un poco y veo que se suelen usar los hilos o threads para evitar estos problemas.

La cosa, es, que tenia realizado un pequeño programa en consola. Y me hacia gracia retocarlo con tkinter. Osea, que los resultados e impresiones ya no fueran por consola, si no por la GUI.

Al entrar por primera vez al programa, este, realiza unos cálculos. En ese caso la consola se quedaba a la espera. Cuando realizaba la tarea, mostraba los resultados. Hasta ahí, todo bien.

Con tkinter cree un boton para realizar esos calculos. Y entonces es cuando se congela. Cosa que no me importa. Ya que con el resultado de ellos, he de trabajar luego. Es decir, no me importa esperar. Lo que no quiero es que al tocar otro botón de la GUI (mientra realiza los calculos) ponga el nefasto mensaje de 'no responde'.

La idea es, si en tkinter, hay alguna forma de inhabilitar los widgets y que así no de la opción a ese mensaje de 'programa no responde'. Y cuando el script acabe los cálculos, los widgets estén operativos.

No se si me explico. La idea no es trabajar en multiproceso o varias tareas a la vez. En vez de eso, que no podamos tocar nada mientras hacemos dichos cálculos.

Con este simple script (mientras en consola se va imprimiendo) si nos da por tocar el botón de nuevo o clicar en la ventana, la GUI se congela ¿Se puede inhabilitar mientras se imprime en la consola? (esto solo es un ejemplo)

Código
  1. from tkinter import Tk, Button
  2.  
  3.  
  4. ventana = Tk()
  5. ventana.geometry('300x300+100+100')
  6.  
  7. def cuenta():
  8.  
  9.    for i in range(1, 100000):
  10.        print(i)      
  11.  
  12.  
  13. btn = Button(ventana, text = 'Pulsa', command = cuenta)
  14. btn.place(x = 10, y = 10)
  15.  
  16.  
  17. ventana.mainloop()

Gracias!


En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.286

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: Tkinter, inhabilitar widgets mientras procesa el script [PYTHON]
« Respuesta #1 en: 2 Enero 2018, 08:14 am »

como no te han respondido te daré mi bruta opinión:
Código
  1. #-*- coding:utf -8 -*-
  2. from tkinter import *
  3. import threading
  4.  
  5. def cuenta():
  6.    btn.config(state="disabled") # con esto obviamente dejo inusable el botón
  7.    def hace():
  8.        for i in range(1, 100000):
  9.            print(i)
  10.  
  11.        btn.config(state="normal")#seguro adivinas que hace esto
  12.  
  13.    t = threading.Thread(target=hace) #no conozco otra forma sin threads, pero me disculpo porque hace años que no uso tkinter.
  14.    t.start()
  15.  
  16. ventana = Tk()
  17. ventana.geometry('300x300+100+100')
  18.  
  19. btn = Button(ventana, text = 'Pulsa', command = cuenta)
  20. btn.place(x = 10, y = 10)
  21.  
  22.  
  23. ventana.mainloop()
  24.  

como ves se pueden deshabilitar los widgets(botones en este caso), pero en mi poca experiencia no sé si se puede hacer lo que buscas sin threads.(igual no veo porque no usarlos, para eso están)
Saludos.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Weather tkinter (Python)
Scripting
@synthesize 1 3,477 Último mensaje 9 Marzo 2011, 17:20 pm
por Marot77
[Python/Tkinter](Kyurem v2.0)Consola de comandos hecha en python
Scripting
AdeLax 0 4,268 Último mensaje 9 Agosto 2013, 22:45 pm
por AdeLax
[Python/Tkinter](Kyurem v2.0)Consola de comandos hecha en python (Continuación)
Scripting
Príncipe_Azul 5 4,921 Último mensaje 16 Abril 2014, 11:19 am
por AdeLax
[Python] No va tkinter en mac « 1 2 »
Scripting
<Trocutor> 17 8,224 Último mensaje 16 Junio 2017, 16:21 pm
por <Trocutor>
[Solucionado][PYTHON]Como dibujar un triangulo perfecto en python con TKinter?
Programación General
Mastodonte 2 6,161 Último mensaje 24 Septiembre 2017, 15:50 pm
por Mastodonte
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines