我有使用某些類的函數的線程,並且這些函數打印了很多東西,我想要在Text()小部件上顯示。主線程和帶線程的文本
所以我試圖使該窗口的類爲類變量和命令:主循環()似乎停止一切從持續....
是否有任何解決方案?
總體思路我想要做的:(控制檯轉換爲圖形用戶界面。)
from tkinter import *
root = Tk()
textbox = Text(root)
textbox.pack()
def redirector(inputStr):
textbox.insert(INSERT, inputStr)
sys.stdout.write = redirector
root.mainloop()
整個代碼:
import threading
from queue import Queue
from Spider import Spider
from domain import *
from general import *
from tkinter import *
def mmm(answer1,answer2,master): # answer1,answer2 are user inputs from the first GUI that gets info, master is the root so i can close it
master.destroy()
PROJECT_NAME = answer1
HOMEPAGE = answer2
DOMAIN_NAME = get_domain_name(HOMEPAGE)
QUEUE_FILE = PROJECT_NAME + '/queue.txt'
CRAWLED_FILE = PROJECT_NAME + '/crawled.txt'
NUMBER_OF_THREADS = 8
queue = Queue() # thread queue
Spider(PROJECT_NAME, HOMEPAGE, DOMAIN_NAME) # a class where the prints happen and some other functions.
root = Tk()
textbox = Text(root)
textbox.pack()
def redirector(inputStr):
textbox.insert(INSERT, inputStr)
sys.stdout.write = redirector
root.mainloop()
# create threads (will die when exit)
def create_threads():
for x in range(NUMBER_OF_THREADS):
t = threading.Thread(target=work)
t.daemon = True
t.start()
# do the next link in the queue
def work():
while True:
url = queue.get()
Spider.crawl_page(threading.current_thread().name, url)
queue.task_done()
# each link is a new job
def create_jobs():
for link in file_to_set(QUEUE_FILE):
queue.put(link) # put the link in the thread queue
queue.join() # block until all processed
crawl()
# if there are items in the queue, crawl them
def crawl():
queued_links = file_to_set(QUEUE_FILE)
if len(queued_links) > 0:
print(str(len(queued_links)) + ' links in the queue')
create_jobs()
create_threads()
crawl()
咋,所以我得到了這個錯誤,它需要在主線程中...這是什麼意思? –
我無法用您提供的代碼示例在這裏重現您的問題......它運行並在tkinter窗口中顯示一個空文本小部件。我相信它的行爲與你編碼的一樣。現在,如果你想要的是有一個文本小部件實時顯示無論在控制檯中顯示的任何內容,並且還對用戶輸入作出反應,它將是一個更復雜的任務。我不確定是否有可能,但可能有一些限制。 –
是我的壞我沒有鏈接我的主代碼....這只是例子虐待編輯它1秒 –