Проблема в том, что в функции pr -> printing происходят достаточно долгие вычисления, и в этот момент окно виснет и не отвечает, а вывод в поле текста происходит только после окончания основного процесса вычисления. Как правильно реализуются потоки? Использую Треды, но это не помогает в данном примере, все равно виснет окно, как сделать вычисления отдельными от функции mainloop() здесь?
#!/usr/bin/env python
import os
import threading
import time
from tkinter import *
import tkinter as tk
from tkinter import ttk
from tkinter import scrolledtext
class MainWindow(tk.Frame):
def __init__(self, root):
super().__init__(root)
self.init_main()
def init_main(self):
lb_log = Label(text=u"логин ")
lb_log .pack()
ent_value_log = Entry(width=40)
ent_value_log .pack()
lb_pass = Label(text=u"пароль ")
lb_pass.pack()
ent_value_pass = Entry(width=40)
ent_value_pass.pack()
btn_print = ttk.Button(text='print', command=lambda: self.printing(ent_value_log.get(), ent_value_pass.get()))
btn_print .place(x=340, y=20)
self.console = scrolledtext.ScrolledText(state='disable')
self.console.pack(pady=15)
def insert_to_console(self, text):
self.console.configure(state='normal') # enable insert
self.console.insert(END, text)
self.console.yview(END) # autoscroll
self.console.configure(state='disabled')
def pr(self, login, password):
self.insert_to_console(login + ' ' + password)
time.sleep(5)
self.insert_to_console(login + ' ' + password)
time.sleep(5)
def printing(self, login, password):
pycrypt = threading.Thread(target=self.pr(login, password))
pycrypt.start()
def run_app():
root = tk.Tk()
app = MainWindow(root)
root.title("palevo")
root.geometry("420x400")
root.mainloop()
zv = MainWindow
zv.run_app()