Ir ao conteúdo
  • Cadastre-se

Python Tkinter - Como parar um loop com um botao?


Posts recomendados

Eu tenho esse programa que me entrega os dados de rede e memórida do meu próprio sistema. O problema é que depois que eu pressiono o botao para "Iniciar" e ele inicia o loop infinito, eu não consigo clicar no botao "Parar", porque a janela congela. Qualquer ajuda é bem-vinda.

 

from datetime import datetime
import time
import psutil
import socket
from openpyxl import Workbook
from tkinter import *
from tkinter import messagebox

arquivo_excel = Workbook()
planilha1 = arquivo_excel.active


class Application:

    running = True

    def __init__(self, master=None):
        self.fontePadrao = ("Arial", "10")
        self.primeiroContainer = Frame(master)
        self.primeiroContainer["pady"] = 20
        self.primeiroContainer.pack()

        self.segundoContainer = Frame(master)
        self.segundoContainer["padx"] = 20
        self.segundoContainer.pack()

        self.terceiroContainer = Frame(master)
        self.terceiroContainer["padx"] = 20
        self.terceiroContainer.pack()

        self.quartoContainer = Frame(master)
        self.quartoContainer["padx"] = 20
        self.quartoContainer.pack()      

        self.titulo = Label(self.primeiroContainer, text="Análise de Desempenho")
        self.titulo["font"] = ("Arial", "10", "bold")
        self.titulo.pack()

        """
        self.registroLabel = Label(self.segundoContainer,text="Número de Registros: ", font=self.fontePadrao)
        self.registroLabel.pack(side=LEFT)

        self.registro = Entry(self.segundoContainer)
        self.registro["width"] = 30
        self.registro["font"] = self.fontePadrao
        self.registro.pack(side=RIGHT)
        """

        self.intervaloLabel = Label(self.segundoContainer, text="Intervalo de Tempo (s): ", font=self.fontePadrao)
        self.intervaloLabel.pack(side=LEFT)

        self.intervalo = Entry(self.segundoContainer)
        self.intervalo["width"] = 30
        self.intervalo["font"] = self.fontePadrao
        self.intervalo.pack(side=RIGHT)

        self.inicio = Button(self.terceiroContainer)
        self.inicio["text"] = "INÍCIO"
        self.inicio["font"] = ("Calibri", "8")
        self.inicio["width"] = 12
        self.inicio["command"] = self.iniciar
        self.inicio.pack()

        self.fim = Button(self.quartoContainer)
        self.fim["text"] = "FIM"
        self.fim["font"] = ("Calibri", "8")
        self.fim["width"] = 12
        self.fim["command"] = self.parar
        self.fim.pack()


        """
        self.verificar = Label(self.quartoContainer, text="", font=self.fontePadrao)
        

        self.mensagem = Label(self.quartoContainer, text="", font=self.fontePadrao)
        self.mensagem.pack()
        """
    running=True

    def iniciar(self):
        #global reg
        global running
        global inter
        running = True
        #reg = int(self.registro.get())
        inter = int(self.intervalo.get())
        
        planilha1.title = "Desempenho"

        valores = [
            ("Dia", "Hora", "Memória", "Bytes_en", "Bytes_re", "Maquina"),
        ]

        for linha in valores:
            planilha1.append(linha)


        local_dt = datetime.now().time()

        Nome = socket.gethostname()

        net = psutil.net_io_counters(pernic=True)
        x = net['Ethernet'].bytes_sent
        y = net['Ethernet'].bytes_recv

        time.sleep(1)

        i=1
        while running:
            if running == False:
                break
            else:
                #tempo = time.strftime('%d/%m/%Y %H:%M:%S', time.localtime())
                dia = time.strftime('%d/%m/%Y', time.localtime())
                tempo = time.strftime('%H:%M:%S', time.localtime())

                net = psutil.net_io_counters(pernic=True)
                a = net['Ethernet'].bytes_sent
                b = net['Ethernet'].bytes_recv
                """
                print(f"Enviados 2: {a}")
                print(f"Recebidos 2: {b}")
                """

                print("\n")
                be = ((a - x)/1024)*5.5
                br = ((b - y)/1024)*5.5
                x = a
                y = b

                
                print("="*10, "Rede", "="*10)
                print(f"Bytes enviados: {be:.2f} KB/s")
                print(f"Bytes Recebidos: {br:.2f} KB/s")
                if be >= 100:
                    print("PICO DE BYTES SENT")
                if br >= 100:
                    print("PICO DE BYTES RECEIVED")
                print("\n")

                print("="*10, "Memória", "="*10)

                psutil.cpu_percent() #valor em float
                psutil.virtual_memory() #objeto com varios campos
                dict(psutil.virtual_memory()._asdict())

                Total = ((psutil.virtual_memory().total/1024)/1024)/1024
                Disponivel = ((psutil.virtual_memory().available/1024)/1024)/1024
                Uso = ((psutil.virtual_memory().used/1024)/1024)/1024
                Porcento = psutil.virtual_memory().percent

                print(f"Total: {Total:.2f} Gigabytes")
                print(f"Disponível: {Disponivel:.2f} GB")
                print(f"Em Uso: {Uso:.2f} GB")
                print(f"Porcentagem em uso: {Porcento}%")
                print("\n")

                print(tempo)
                print(dia)

                planilha1.cell(row=i+1, column=1, value = dia)
                planilha1.cell(row=i+1, column=2, value = tempo)
                planilha1.cell(row=i+1, column=3, value = f"{Porcento}%")
                planilha1.cell(row=i+1, column=4, value = f"{be:.2f} KB/s")
                planilha1.cell(row=i+1, column=5, value = f"{br:.2f} KB/s")
                planilha1.cell(row=i+1, column=6, value = Nome)

                time.sleep(inter)
                i+=1

        arquivo_excel.save("Desempenho.xlsx")

            
    def parar(self):
        global running
        running = False
        messagebox.showinfo('Análise de Desempenho','Análise realizada!')
            

root = Tk()
Application(root)
root.mainloop()

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...