Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:gassens()缺少1个必需的位置参数:';自我';_Python_Function_Class_Tkinter_Tk - Fatal编程技术网

Python TypeError:gassens()缺少1个必需的位置参数:';自我';

Python 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

此代码从esp8266获取气体传感器(使用“RequestHandler\u httpd(BaseHTTPRequestHandler)”) 我希望它在收到气体传感器时显示在按键上(在“class HelloWorld->def gassens”上) 但是得到这个错误: do_GET中的文件“panel2.py”,第124行 HelloWorld.gassens() TypeError:gassens()缺少1个必需的位置参数:“self”

我是python初学者,请帮助我 tnx


这不是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()