如何将PyQt信号连接到外部函数

问题描述:

如何将一个文件中的pyqt按钮信号连接到另一个python文件中的函数?我尝试了各种各样的东西,但似乎没有任何工作。 这是第一个文件:如何将PyQt信号连接到外部函数

from PyQt4 import QtGui 
from PyQt4.QtGui import QMainWindow 
from MainUIFile import Ui_Main 
from pythonfile import myOutsideFunction 
class MainWindow(QMainWindow,Ui_file): 
    def __init__(self): 
     QMainWindow.__init__(self) 
     self.setupUi(self) 
     self.btn.clicked.connect(myOutsideFunction()) 

第二个文件是由第一被呼叫:

def myOutsideFunction(self): 
    # Do some stuff here 

我怎么会去这样做呢?

您当前正在拨打myOutsideFunction并将结果传递给connect函数,该函数需要callable作为参数。

myOutsideFunction在连接调用

self.btn.clicked.connect(myOutsideFunction) 
+0

我实际上已经做了.connect(myOutsideFunction)没有括号之前我没有任何运气发布这个。感谢您的答复。 – Collaptic

+0

您能否显示您正在接收的错误? – user3419537

+0

@ user3419537。请注意'myOutsideFunction'有一个'self'参数。如果这是故意的,它可能会解释其他错误是什么...... – ekhumoro

什么是连接到一个函数的代码以外的重要性删除括号?你能不能做这样的事情:

def myOutsideFunction(a,b,c,d): 
    #process variables/objects a,b,c,d as you wish 
    return answer 

from PyQt4 import QtGui 
from PyQt4.QtGui import QMainWindow 
from MainUIFile import Ui_Main 
from pythonfile import myOutsideFunction 
class MainWindow(QMainWindow,Ui_file): 
    def __init__(self): 
     QMainWindow.__init__(self) 
     self.setupUi(self) 
     self.btn.clicked.connect(self.pressed_the_button()) 
     #initialize your variables/objects for your outside function if need be 

    def pressed_the_button(self): 
     answer_from_outside_function = myOutsideFunction(self.a,self.b,self.c,self.d) 
     # run whatever you need to here... 
+0

这不是一个解决方案 - 它与问题中的代码具有完全相同的问题。 – ekhumoro

+0

@ekhumoro你怎么看?我们没有迹象表明实际的失败是什么。问题是如何将按钮连接到外部功能。这是做到这一点的一种方法。据推测,人们可以将其他变量/对象传递到外部函数中,这可以通过在__init__或代码中的其他位置定义它们来完成。我编辑了我的答案,以便更具描述性。 – user2070870

+0

问题中的代码不起作用,因为它试图将可调用对象的返回值传递给'connect',而不是可调用对象本身。你的代码犯了完全一样的错误。 [其他答案](http://*.com/a/40027367/984421)已经涵盖了这一点。 – ekhumoro