如何解决无法在其他类方法的scrolledtext小部件末尾插入文本
我正在尝试使用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()
解决方法
我知道了。 在使用.mainloop()方法之前,必须使用“ gui.check_for_messages”。 所以:
x = tkinter.Tk()
gui = GUI(x)
gui.check_for_messages()
gui.mainloop()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。