python - PyQt错误: 'PyQt4.QtCore.pyqtSignal' object has no attribute 'connect'

标签 python pyqt

这是我的端口扫描器代码。我想让它成为多线程,所以它需要使用信号。但我收到一个错误。

from __future__ import print_function
import socket
import threading
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys

from ui import Ui_MainWindow


def clickable(widget):
    class Filter(QObject):

        clicked = pyqtSignal()

        def eventFilter(self, obj, event):

            if obj == widget:
                if event.type() == QEvent.MouseButtonRelease:
                    if obj.rect().contains(event.pos()):
                        self.clicked.emit()
                        return True

            return False

    filter = Filter(widget)
    widget.installEventFilter(filter)
    return filter.clicked


class Testhost(QObject):
    thost = pyqtSignal(str)

    def __init__(self, t_host, lip):
        QObject.__init__(self)
        self.t_host = t_host
        self.lip = lip

    def start_test(self):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(5)
        try:
            sock.connect((self.t_host, 80))
            # sock1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            # sock1.settimeout(1)
            # sock1.connect((self.t_host, 23))

            if self.lip == self.t_host:
                self.thost.emit("" + self.t_host + " L")
            else:
                self.thost.emit(self.t_host)

        except:
            pass


class Application(QMainWindow, Ui_MainWindow):
    thread_c = 0

    def __init__(self):
        QMainWindow.__init__(self)
        self.setupUi(self)
        Testhost.thost.connect(self.appender)
        clickable(self.Start1).connect(lambda w=self.Ip.text(): self.scan(w))

    def scan(self, iprange):

        Testhost('192.168.1.1', '192')

    def appender(self, text):
        self.listWidget.addItem(text)


app = QApplication(sys.argv)
mainwindow = Application()
mainwindow.show()
app.exec_()

我收到错误:

Traceback (most recent call last):
  File "D:/Project/Python/Ice Net/Ice Net.py", line 105, in <module>
    mainwindow = Application()
  File "D:/Project/Python/Ice Net/Ice Net.py", line 63, in __init__
    Testhost.thost.connect(self.appender)
AttributeError: 'PyQt4.QtCore.pyqtSignal' object has no attribute 'connect'

我已经尝试了所有的解决方案,但没有成功。

最佳答案

你这样做不正确,你需要首先将信号绑定(bind)到Testhost类的实例,然后执行信号连接,如下所示:

t = Testhost('192.168.1.1', '192')
t.thost.connect(self.appender)

关于python - PyQt错误: 'PyQt4.QtCore.pyqtSignal' object has no attribute 'connect' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34470436/

相关文章:

python - 8 拼图计算邻居 python

python - pyqtSlot函数

python - PyQt5 玛雅 2017

python - 通过 SSLError 处理异常请求

python - 适用于特定数据集的最高/最低温度的python hadoop代码

python - Python time.sleep(n) 调用应该使用多少 CPU

python - 嵌套 for 循环索引超出范围

qt - pyqt 选中其他复选框时,将复选框状态更改为未选中

python - 选择无行时发出的 PyQt QTableWidget 信号

python - Qt.QueuedConnection 从不发送消息