- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Twisted 和 PyQt 在 Python 中编写一个应用程序。我想做的是,当客户端注册时,它会反射(reflect)在前端。因此,当服务器注册客户端时,它会发出一个信号,该信号将被捕获并触发一个插槽,但是,它似乎不起作用。代码中的两个信号槽均不起作用。
from PyQt4 import QtGui, QtCore
import sys
from twisted.internet.protocol import Factory, Protocol
from twisted.protocols import amp
import qt4reactor
class register_procedure(amp.Command):
arguments = [('MAC',amp.String()),
('IP',amp.String()),
('Computer_Name',amp.String()),
('OS',amp.String())
]
response = [('req_status', amp.String()),
('ALIGN_FUNCTION', amp.String()),
('ALIGN_Confirmation', amp.Integer()),
('Callback_offset',amp.Integer())
]
class Ui_MainWindow(QtGui.QMainWindow):
def __init__(self,reactor, parent=None):
super(Ui_MainWindow,self).__init__(parent)
self.reactor=reactor
self.pf = Factory()
self.pf.protocol = Protocol
self.reactor.listenTCP(3610, self.pf) # listen on port 1234
def setupUi(self,MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(903, 677)
self.centralwidget = QtGui.QWidget(MainWindow)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth())
self.centralwidget.setSizePolicy(sizePolicy)
self.create_item()
self.retranslateUi(MainWindow)
self.connect(self, QtCore.SIGNAL('triggered()'), self.closeEvent)
QtCore.QObject.connect(self,QtCore.SIGNAL('registered()'),self.registered)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
self.pushButton_4.setText(_translate("MainWindow", "Delete System ", None))
self.pushButton.setText(_translate("MainWindow", "Add System", None))
self.label_2.setText(_translate("MainWindow", "SYSTEM STATUS", None))
self.label.setText(_translate("MainWindow", "Monitoring Output", None))
def registered(self):# this function is not being triggered
print "check"
self.textbrowser.append()
def closeEvent(self, event):#neither is this being triggered
print "asdf"
self.rector.stop()
MainWindow.close()
event.accept()
class bridge(QtCore.QObject):
mySignal = QtCore.SIGNAL('mySignal(QString)')
def __init__(self):
QtCore.QObject.__init__(self)
def registered(self):
print "p op"
QtCore.QObject.emit(self, QtCore.SIGNAL('registered'))
class Protocol(amp.AMP):
@register_procedure.responder
def register_procedure(self,MAC,IP,Computer_Name,OS):
self.bridge_conn=bridge()
cursor_device.execute("""select * FROM devices where MAC = ?;""",[(MAC)])
exists_val=cursor_device.fetchone()
cursor_device.fetchone()
print "register"
if not exists_val== "":
cursor_device.execute("""update devices set IP= ? , Computer_name= ? , OS = ? where MAC= ?;""",[IP,Computer_Name,OS,MAC])
self.bridge_conn.registered() # <--emits signal
return {'req_status': "done" ,'ALIGN_FUNCTION':'none','ALIGN_Confirmation':0,'Callback_offset':call_offset(1)}
else:
cursor_device.execute("""INSERT INTO devices(Mac,Ip,Computer_name,Os) values (?,?,?,?);""",[MAC,IP,Computer_Name,OS])
self.bridge_conn.registered()#<--emits signal
return {'req_status': "done" ,'ALIGN_FUNCTION':'main_loop()','ALIGN_Confirmation':0,'Callback_offset':0}
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
try:
import qt4reactor
except ImportError:
from twisted.internet import qt4reactor
qt4reactor.install()
from twisted.internet import reactor
MainWindow = QtGui.QMainWindow() # <-- Instantiate QMainWindow object.
ui = Ui_MainWindow(reactor)
ui.setupUi(MainWindow)
MainWindow.show()
reactor.run()
最佳答案
这是我连接两个类的方法,我不知道这是最好的方法,但它按我想要的方式工作:
class MyForm(QtGui.QMainWindow):
def __init__(self):
....
self.connect(self, QtCore.SIGNAL("mySignal(PyQt_PyObject)"), self.doSomething)
....
def someMethod(self):
...
button = MyPushButton(i, self)
...
def doSomething(self):
...
class MyPushButton(QtGui.QPushButton):
def __init__(self, elementID, mForm):
super(MyPushButton, self).__init__()
self.__elementID = elementID
self.__mForm = mForm
self.connect(self, QtCore.SIGNAL('clicked()'), self, QtCore.SLOT("triggerOutput()"))
@QtCore.pyqtSlot()
def triggerOutput(self):
self.__mForm.emit(QtCore.SIGNAL("mySignal(PyQt_PyObject)"), self.__elementID)
所以,重要的是最后一行,我已从 MyPushButton 类 (self) 向 MyForm 类 (__mForm) 发出信号,并调用 doSomething() 。但正如您在这一行中看到的:button = MyPushButton(i, self)
,我已将 self (MyForm) 传递给 MyPushButton。
我希望这会对您有所帮助。
关于python - 如何使用 PyQt Signal Slot 连接两个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17451597/
我正在学习 Vue.js,并且正在努力寻找一种组织代码的方法。我试图让一切尽可能模块化,所以在制作 slider 时我做了以下事情: export
我有一个像这样定义的 Web 组件自定义元素。 class Dropdown extends HT
我遇到了这样的崩溃: #0 0x90b05955 in __gnu_debug::_Safe_iterator_base::_M_detach #1 0x90b059ce in __gnu_deb
正如标题中所写 - “信号和插槽”是一种简单的响应式(Reactive)编程方式吗? 最佳答案 Signals/Slots是 Observer Pattern 的实现. 来自维基 Reactive P
我有一个关于太阳系行星列表的 intent 。 { "intent": "PlanetIntent", "slots": [ { "nam
我们的消费计划中有一个 Azure Function v3 实例,其中包括一个暂存槽以减少部署期间的停机时间。 我们的部署流程是: 将代码部署到暂存槽 启动暂存槽 将暂存槽与生产槽交换 停止暂存槽 我
我们的消费计划中有一个 Azure Function v3 实例,其中包括一个暂存槽以减少部署期间的停机时间。 我们的部署流程是: 将代码部署到暂存槽 启动暂存槽 将暂存槽与生产槽交换 停止暂存槽 我
我遇到一个同步组件 JavaScript 在实际显示之前加载的问题。 使用 dynamic-import 导入的组件在需要时使用 v-if 显示以加载它们。当它们被显示时,它们的 JavaScript
我有 6 个 subdag。它们中的每一个都包含一个带有 pool='crawler' 的任务。这需要大量资源,所以我创建了一个池 crawler只有 1 个插槽。 当我运行 DAG 时,似乎绕过了池
Vue 对象有一个非常有用的成员,叫做 $attrs。什么$attrs does 包含所有未被识别为当前组件 props 的属性。 $attrs 的一个很好的例子是 here . 我想知道 $scop
我有一个运行 Node.js 应用程序的 Azure Function App v3,该应用程序具有生产槽和阶段槽。使用在部署中心创建的操作将其部署到 GitHub。我有一项针对 prod 的部署操作
我有一个运行 Node.js 应用程序的 Azure Function App v3,该应用程序具有生产槽和阶段槽。使用在部署中心创建的操作将其部署到 GitHub。我有一项针对 prod 的部署操作
我有一个事件架构: owner: { type: Schema.Types.ObjectId, ref: 'User', required: true }, participa
我想测试这个FooComponent: 它是这样使用的(例如在 ParentComponent 中): 因此,我想测试我的组件对从 slot Prop 调用此“fn
我有一个意图,其中包含三个必需的插槽(我们称它们为:slot_a、slot_b、slot_c),所有类型都是 @系统编号。当检测到意图时,系统会提示我询问缺少的插槽: What's slot_a? 我
我有这个预订表结构 |ID|timeBooked | duration | |2 |2013-05-09 11:10:00| 30 | |1 |2013-05-09 14:
突然开始在所有 Azure App Services 中持续发生使用Deployment Slots . Error Message: "Failed swapping site. Error: Ca
我在我的azure应用程序服务中创建了多个插槽(测试、阶段和产品)。同样,我为每个环境创建了各自的 web.config 文件。我正在测试环境槽中通过 octopus 部署工具部署我的应用程序,因此最
所以我正在尝试使用 C++ 学习 Qt Framework。我正在了解信号和插槽,但我很难创建自定义插槽。因此,当我按照一些教程进行操作时,我的程序出现了以下错误: QObject::connec
如何引用 Vue.js 中的文本? Vue.component('component', { template: ``, created: function() { // i woul
我是一名优秀的程序员,十分优秀!