2

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_())
4

1 に答える 1

1

この行で

webServer().log.emit(method)

新しい Web サーバー インスタンスを作成し、そのログ シグナルを発行します。これは新しいオブジェクトであるため、この信号は何にも接続されていないため、何もしていません。

正しいオブジェクトに信号を送信するには、次のようにします。

def run(self):
    ...
    server = self
    def do_METHOD(self):
        ...
        server.log.emit(self)
于 2013-06-27T23:21:16.573 に答える