我正在尝试使用tkinter构建客户端套接字,但是当我尝试监听服务器套接字时,我必须创建另一个方法。在该方法中,我希望将来自服务器的每条消息都插入到scrolledtext小部件的末尾,但出现此错误:
这是确切的错误:
Traceback (most recent call last):
File "client_dummy_GUI.py", line 39, in <module>
gui.check_for_messages()
File "client_dummy_GUI.py", line 32, in check_for_messages
self.chat_text.insert(tkinter.END, "{0}\n".format(message_from_server.decode("utf-8")))
File "C:\Users\David\AppData\Local\Programs\Python\Python38-32\lib\tkinter\__init__.py", line 3738, in insert
self.tk.call((self._w, 'insert', index, chars) + args)
_tkinter.TclError: invalid command name ".!frame.!scrolledtext"
这是代码:
import socket
import tkinter, tkinter.scrolledtext
class GUI(tkinter.Frame):
def __init__(self, master = None):
super().__init__()
self.master = master
self.pack()
self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.client.connect((socket.gethostname(), 1337))
self.client.settimeout(0.2)
self.BUF_SIZE = 4096
self.chat_text = tkinter.scrolledtext.ScrolledText(self.master)
self.chat_text.pack()
self.entry_text = tkinter.StringVar()
self.entry = tkinter.Entry(master, textvariable = self.entry_text)
self.entry.pack()
self.entry.bind("<Return>", self.send_message)
def send_message(self, e):
message_to_server = self.entry_text.get()
self.client.send(message_to_server.encode("utf-8"))
def check_for_messages(self):
while True:
try:
message_from_server = self.client.recv(self.BUF_SIZE)
self.chat_text.insert(tkinter.END, "{0}\n".format(message_from_server.decode("utf-8")))
except socket.timeout as _e_:
print(str(_e_))
x = tkinter.Tk()
gui = GUI(x)
gui.mainloop()
gui.check_for_messages()
答案 0 :(得分:0)
我知道了。 在使用.mainloop()方法之前,必须使用“ gui.check_for_messages”。 所以:
x = tkinter.Tk()
gui = GUI(x)
gui.check_for_messages()
gui.mainloop()