Python 2.7 当PyQT4与BaseHTTPServer混合时,Python会冻结
我的Python代码中有一个错误,我是Python新手,也是PyQT新手。我要做的是用GUI构建一个基本的http代理服务器。我已经在控制台中完成了,但是当我尝试实现GUI时,我得到了一个错误 这是我的代码,谢谢你的帮助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
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)