我有一個執行緒問題,這個問題已經問過了,但它沒有回答我的問題。我正在嘗試使用套接字創建一個聊天應用程式,以了解它如何更好地作業。這里的問題是我無法讓它自動接收訊息,我基本上每次收到新訊息時都必須呼叫 get() 函式。我試圖用執行緒解決這個問題,但現在我得到了另一個錯誤:
from tkinter import *
import threading
import socket
try:
s = socket.socket()
except:
print("Failed socket creation")
port = 12345
s.connect(('127.0.0.1', port))
print("Successfuly Connected")
def Main():
m = tkinter.Tk()
m.title('TrollChat(Client)')
m.iconbitmap("troll.ico")
m.geometry("400x400")
def sendinput():
message = e1.get()
s.send(message.encode())
tkinter.Label(m, text="Message: ").grid(row=0)
e1 = tkinter.Entry(m)
e1.grid(row=0, column=1)
button1 = tkinter.Button(m, text='Send', width=25, command=sendinput)
button1.grid(row=0, column=3)
m.mainloop()
def get():
while True:
data = s.recv(1024).decode()
if not data:
pass
print(data)
if __name__ == '__main__':
t1 = threading.Thread(target=Main, args=(0,))
t1.start()
t2 = threading.Thread(target=get, args=(0,))
t2.start()
錯誤是:
Exception in thread Thread-1:
Traceback (most recent call last):
File "E:\Bots\Thonny\lib\threading.py", line 926, in _bootstrap_inner
self.run()
File "E:\Bots\Thonny\lib\threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
TypeError: Main() takes 0 positional arguments but 1 was given
Exception in thread Thread-2:
Traceback (most recent call last):
File "E:\Bots\Thonny\lib\threading.py", line 926, in _bootstrap_inner
self.run()
File "E:\Bots\Thonny\lib\threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
TypeError: get() takes 0 positional arguments but 1 was given
其他問題:我嘗試通過替換來解決問題
t1 = threading.Thread(target=Main, args=(0,))
和
t2 = threading.Thread(target=get, args=(0,))
和
t1 = threading.Thread(target=Main(), args=(0,))
和
t2 = threading.Thread(target=get(), args=(0,))
但它在第一個執行緒之后停止編譯。有人可以幫忙解決這個問題嗎?
uj5u.com熱心網友回復:
要解決您的錯誤,請更改以下代碼塊:
if __name__ == '__main__':
t1 = threading.Thread(target=Main, args=(0,))
t1.start()
t2 = threading.Thread(target=get, args=(0,))
t2.start()
如下,因為 Main() 和 get() 都不接受任何引數:
if __name__ == '__main__':
t1 = threading.Thread(target=Main)
t1.start()
t2 = threading.Thread(target=get)
t2.start()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/470139.html