为什么是插座.接受()不显示Tkinter GUI?

2024-04-26 18:36:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将一个客户机-服务器包制作成一个应用程序。因此,当应用程序打开时,服务器会自动进入待机/监听模式。问题是在运行服务器套接字时,直到socket.accept()之后才会显示gui。我希望gui和服务器套接字同时发生。你知道吗

我已经注释掉了几行代码,它可以按预期工作到conn,addr=s.accept()

imports*

root= Tk()

#main config
#mouse drag
# ------------------ Server Socket ------------------
connectionStatus = Label(rootCanvasBG)
connectionStatus.grid(column=0, row=7)

s = socket.socket()
host = socket.gethostname()
port = 8080
s.bind((host, port))
s.listen(10)
print(host)
print('waiting for connection')
connectionStatus.config(text='Waiting for any incoming connections')
conn, addr = s.accept()  # thread issue, not showing tkinter
connectionStatus.config(text=addr)
print(addr, 'connected')

#Layout

root.mainloop()

我读过关于线程来解决这个问题的文章,但是没有一个例子能给出足够清晰的答案。我对python和一般编程还是相当陌生的。谢谢


Tags: text服务器config应用程序hostforportgui
1条回答
网友
1楼 · 发布于 2024-04-26 18:36:57
import threading   # <<< Import Threading

#           Server Socket          

connectionStatus = Label(rootCanvasBG)
connectionStatus.grid(column=0, row=7)

s = socket.socket()
host = socket.gethostname()
port = 8080
s.bind((host, port))
s.listen(10)
print(host)
print('waiting for connection')
connectionStatus.config(text='Waiting for any incoming connections')
def mainloop():   # <<< create a def
    while True:
        conn, addr = s.accept()  # thread issue, not showing tkinter
        connectionStatus.config(text=addr)
        print(addr, 'connected')
threading.Thread(target=mainloop).start() # <<< run loop on new thread

找到解决方案,从导入threading开始 用while loopconn, addr = s.accept()创建一个def mainloop() 使用threading.Thread()mainloop.start()为目标执行线程。你知道吗

相关问题 更多 >