2016-10-13 38 views
0

如何將一個文件中的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 

我怎麼會去這樣做呢?

回答

2

您當前正在撥打myOutsideFunction並將結果傳遞給connect函數,該函數需要callable作爲參數。

myOutsideFunction在連接調用

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

我實際上已經做了.connect(myOutsideFunction)沒有括號之前我沒有任何運氣發佈這個。感謝您的答覆。 – Collaptic

+0

您能否顯示您正在接收的錯誤? – user3419537

+0

@ user3419537。請注意'myOutsideFunction'有一個'self'參數。如果這是故意的,它可能會解釋其他錯誤是什麼...... – ekhumoro

0

什麼是連接到一個函數的代碼以外的重要性刪除括號?你能不能做這樣的事情:

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://stackoverflow.com/a/40027367/984421)已經涵蓋了這一點。 – ekhumoro

相關問題