Python TypeError:gassens()缺少1个必需的位置参数:';自我';
此代码从esp8266获取气体传感器(使用“RequestHandler\u httpd(BaseHTTPRequestHandler)”) 我希望它在收到气体传感器时显示在按键上(在“class HelloWorld->def gassens”上) 但是得到这个错误: do_GET中的文件“panel2.py”,第124行 HelloWorld.gassens() TypeError:gassens()缺少1个必需的位置参数:“self” 我是python初学者,请帮助我 tnxPython TypeError:gassens()缺少1个必需的位置参数:';自我';,python,function,class,tkinter,tk,Python,Function,Class,Tkinter,Tk,此代码从esp8266获取气体传感器(使用“RequestHandler\u httpd(BaseHTTPRequestHandler)”) 我希望它在收到气体传感器时显示在按键上(在“class HelloWorld->def gassens”上) 但是得到这个错误: do_GET中的文件“panel2.py”,第124行 HelloWorld.gassens() TypeError:gassens()缺少1个必需的位置参数:“self” 我是python初学者,请帮助我 tnx 这不是Pyt
这不是Python中调用方法的方式。如果是Java,gassens是静态的,那么您可以这样做。然而,Python中没有静态变量的概念
HelloWorld.gassens()
相反,您希望创建类的实例以使用函数gassens。例如:
gas = HelloWorld(masterParam)
gas.gassens()
您不能直接在另一个进程中访问tkinter小部件。因此,在HTTP服务器部件上使用
threading.Thread
而不是multiprocessing.Process
,并在主线程中运行tkinter GUI
以下是基于您的代码的建议更改:
from threading import Thread
...
class HelloWorld:
...
def gassens(self, gas):
self.label2.config(text=gas)
class RequestHandler_httpd(BaseHTTPRequestHandler):
def do_GET(self):
# send back response
messagetosend = b'this is from pi'
self.send_response(200)
self.send_header('Content-Type', 'text/plain')
self.send_header('Content-Length', len(messagetosend))
self.end_headers()
self.wfile.write(messagetosend)
req = self.requestline
tstgas = req.find('gas')
if tstgas == 5:
# requestline: GET /gasXXX HTTP/1.1
gas = req.split()[1][4:]
print('gaz:', gas)
ex.gassens(gas)
...
if __name__ == '__main__':
# run tkinter GUI in main thread
root = tk.Tk()
root.geometry('250x150+300+300')
ex = HelloWorld(root)
# using thread instead of process
Thread(target=server_rp, daemon=True).start()
root.mainloop()
一般来说,不要使用“global”修饰符,这是一种糟糕的编程实践。我认为问题在于您需要在请求处理程序类中调用ex.gassens(),而不是helloworld.gassens()。ex.gassens()是“不工作”的。我得到这个错误:>文件“panel2.py”,第124行,在do_get gas=helloworld(masterParam)中名称错误:名称“masterParam”不正确defined@AliKheyrandish变量只是一个例子。您需要为初始值设定项提供变量主控。
from threading import Thread
...
class HelloWorld:
...
def gassens(self, gas):
self.label2.config(text=gas)
class RequestHandler_httpd(BaseHTTPRequestHandler):
def do_GET(self):
# send back response
messagetosend = b'this is from pi'
self.send_response(200)
self.send_header('Content-Type', 'text/plain')
self.send_header('Content-Length', len(messagetosend))
self.end_headers()
self.wfile.write(messagetosend)
req = self.requestline
tstgas = req.find('gas')
if tstgas == 5:
# requestline: GET /gasXXX HTTP/1.1
gas = req.split()[1][4:]
print('gaz:', gas)
ex.gassens(gas)
...
if __name__ == '__main__':
# run tkinter GUI in main thread
root = tk.Tk()
root.geometry('250x150+300+300')
ex = HelloWorld(root)
# using thread instead of process
Thread(target=server_rp, daemon=True).start()
root.mainloop()