Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 2.7 当PyQT4与BaseHTTPServer混合时,Python会冻结_Python 2.7_Pyqt4 - Fatal编程技术网

Python 2.7 当PyQT4与BaseHTTPServer混合时,Python会冻结

Python 2.7 当PyQT4与BaseHTTPServer混合时,Python会冻结,python-2.7,pyqt4,Python 2.7,Pyqt4,我的Python代码中有一个错误,我是Python新手,也是PyQT新手。我要做的是用GUI构建一个基本的http代理服务器。我已经在控制台中完成了,但是当我尝试实现GUI时,我得到了一个错误 这是我的代码,谢谢你的帮助 import BaseHTTPServer, SocketServer,sys from PyQt4 import QtCore, QtGui from Ui_MiniGui import Ui_MainWindow class ThreadingHTTPServer(Soc

我的Python代码中有一个错误,我是Python新手,也是PyQT新手。我要做的是用GUI构建一个基本的http代理服务器。我已经在控制台中完成了,但是当我尝试实现GUI时,我得到了一个错误

这是我的代码,谢谢你的帮助

import BaseHTTPServer, SocketServer,sys
from PyQt4 import QtCore, QtGui
from Ui_MiniGui import Ui_MainWindow

class ThreadingHTTPServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer):
    pass

class webServer(QtCore.QThread):
    log = QtCore.pyqtSignal(object)

    def __init__(self, parent = None):
        QtCore.QThread.__init__(self, parent)

    def run(self):
        self.log.emit("Listening On Port 1805")
        Handler = BaseHTTPServer.BaseHTTPRequestHandler

        def do_METHOD(self):
            method = self.command
#I got some trouble here, how can i emit the signal back to the log?
            #self.log.emit(method) not work, python not crash
            #webServer.log.emit(method) not work, python not crash
        #below one not work and python crashes immediately
            webServer().log.emit(method)

        Handler.do_GET = do_METHOD

        self.httpd = ThreadingHTTPServer(("", 1805), Handler)
        self.httpd.serve_forever()

class Form(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.server = webServer()
        self.server.log.connect(self.write_to_textEdit)
        self.server.start()

    def write_to_textEdit(self, data):
        print data
        self.ui.textEdit.setText(data)

if __name__ == "__main__":

    app = QtGui.QApplication(sys.argv)
    myapp = Form()
    myapp.show()
    sys.exit(app.exec_())
在这一行

webServer().log.emit(method)
您创建一个新的Web服务器实例并发出它的日志信号。因为这是一个新的物体,这个信号没有连接到任何东西,所以它什么也没做

要在右侧对象上发射信号,可以执行以下操作:

def run(self):
    ...
    server = self
    def do_METHOD(self):
        ...
        server.log.emit(self)