我在这个网站上读过至少25个类似的问题,但我根本无法让它正常工作
就目前而言,我只是想用客户端和服务器构建一个简单的聊天应用程序。GUI将在一个独立的线程上运行,以确保逻辑保持流畅且不会锁定。我已经从代码中删除了大部分逻辑以隔离问题
import socket, csv, datetime, tkinter as tk, threading
from tkinter import ttk
interface = tk.Tk()
test = tk.StringVar()
test.set("String Var Test")
class serverInterface():
def __init__(self, interface):
global test
self.messageLog = tk.Text(interface, height=10, state="disabled", yscrollcommand="scrollBar.set")
self.scrollBar = ttk.Scrollbar(interface, command=self.messageLog.yview).grid(row=0, column=2, sticky="nsew")
self.messageLog.grid(row=0, column=0, columnspan=2)
test.trace("w", serverInterface.guiUpdate(self))
def guiUpdate(self):
self.messageLog.insert(tk.END, test)
class server():
def __init__(self):
global test
print("Server thread")
while True:
test.set("Updated from server object")
interface.title("Server")
serverInterface = threading.Thread(target=serverInterface(interface)) #Create serverInterface object
server = threading.Thread(target=server, daemon=True) # Create server object
server.start()
interface.mainloop()
这导致控制台被垃圾发送Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\thoma\AppData\Local\Programs\Python\Python38\lib\tkinter\__init__.py", line 1883, in __call__ return self.func(*args) TypeError: 'NoneType' object is not callable
我也尝试过使用Queue(),正如其他人建议的那样,但这只会导致不同的错误集,我觉得使用StringVar()可能是更好的方法
我很欣赏这段代码中可能有一些行不需要在那里,它们只是所有不同尝试的遗留内容:/
任何解决方案都将不胜感激
您询问的错误是由以下行引起的:
该行的功能与此相同:
因为
guiUpdate(self)
返回None
,所以您要求tkinter调用None
。因此错误TypeError: 'NoneType' object is not callable
必须为
trace
方法提供一个可调用的(即:对函数的引用)。在这种特定情况下,您需要使用self.guiUpdate
跟踪将automatically pass arguments to the function,因此需要正确定义函数以接受这些参数。您还存在一个错误,您试图在文本小部件中插入一个对象(测试),而不是对象中包含的文本
相关问题 更多 >
编程相关推荐