나는 어떤 클래스의 함수를 사용하는 스레드가 있는데,이 함수는 Text() 위젯에 표시하고자하는 것들을 많이 인쇄한다. 메인 루프와 텍스트 (
가에 대한 해결책이 .... (가) 계속 이르기까지 모든 것을 중지 할 것 돌이 : 그래서 내가 클래스 변수와 명령과 클래스의 창을 만들려고?내가하고 싶은 일반적인 생각 : (GUI 콘솔을 변환 ..)이
from tkinter import *
root = Tk()
textbox = Text(root)
textbox.pack()
def redirector(inputStr):
textbox.insert(INSERT, inputStr)
sys.stdout.write = redirector
root.mainloop()
전체 코드 : 즉시 당신이 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()
ye 그래서 메인 스레드에 있어야한다는 오류가 발생했습니다 ... 무슨 뜻입니까? –
제공된 코드 샘플을 사용하여 문제를 재현 할 수 없습니다 ... 실행되고 tkinter 창에 빈 텍스트 위젯이 표시됩니다. 당신이 코딩 한 것처럼 행동하고 있습니다, 나는 믿습니다. 이제 원하는 것이 콘솔에 나타나는 모든 것을 실시간으로 보여주고 사용자 입력에 반응하는 텍스트 위젯을 사용하는 것이 훨씬 더 복잡한 작업이 될 것입니다. 가능한지 확실하지 않지만 한계가있을 수 있습니다. –
예, 내 메인 코드를 링크하지 못했습니다. 단지 예제가 잘못되었습니다. 1 초 –