Запуск потока с объектом Tkinter - PullRequest
0 голосов
/ 13 мая 2019

Когда я нажимаю кнопку, scan_open_ports начинает работать до тех пор, пока строка ip_list.curselection (), где она останавливается, не блокирует выполнение функции ... Я хотел знать, почему и как это исправить? Спасибо

def scan_open_ports():
    #long runtime function
    print "Asdasd\"
    ip_list.curselection()
def thr_open_ports():
    threading.Thread(target=scan_open_ports).start()
ip_list = Listbox()
scan_ports = Button(window, text="Scan Open Ports", command= thr_open_ports, height = 10, width = 20)

1 Ответ

0 голосов
/ 13 мая 2019

Я бессовестно украл некоторый код из этого ответа, просто как основу для некоторого tkinter кода: Как выровнять метку, запись в tkinter

Следующий код адаптирует это кимеют Queue и Thread, которые запускаются только после нажатия кнопки.

* Thread связывается обратно с mainloop через Queue, который опрашивается вызовами на root.after()

from tkinter import *
from threading import Thread
from queue import Queue
from time import sleep
from random import randint

root = Tk()

root.geometry("583x591+468+158")
root.title("NOKIA _ANSI Performance")
root.configure(borderwidth="1")
root.configure(relief="sunken")
root.configure(background="#dbd8d7")
root.configure(cursor="arrow")
root.configure(highlightbackground="#d9d9d9")
root.configure(highlightcolor="black")

Label3 = Label(root)
Label3.configure(text='''Device  IP Address :''')
Label3.pack()
Label5 = Label(root)
Label5.configure(text='''Username :''')
Label5.pack()

Entry5 = Entry(root)
Entry5.pack()
th = None
q = Queue()

def run_me(q):
    sleep(5)
    q.put(randint(1, 99))

def check_queue():
    if not q.empty():
        item = q.get()
        Label5.configure(text=str(item))
    root.after(200, check_queue)

def do_thread():
    global th
    th = Thread(target=run_me, args=(q,))
    th.start()

Button1 = Button(root)
Button1.configure(pady="0")
Button1.configure(text='''NEXT''')
Button1.configure(command=do_thread)
Button1.pack()
root.after(200, check_queue)
mainloop()

mainloop() не блокируется ни Thread, ни опросом, который check_queue() делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...