2017-08-09 105 views
-1

訪問UI元素

function.py

class testClass(object): 
    def functionA(self): 
     #doSomething 
     self.Qlabel.clear() 

main.py

class mainClass(object): 
    def __init__(self, parent = #something): 
     #initialize something 

     super(mainClass, self).__init__(parent) 
     self.setupUi(self) 
     self.Qlabel.clicked.connect(self.testFunc) 


    def testFunc(self): 

     import function as FT 
     FT.testClass().functionA(self) 

我盡PyQt的function.py連接到main.py。它不斷給我這個TypeError:functionA()只需要1個參數(給定2)。

如果我帶走了「自我」的,這樣它的FT.testClass().functionA(),然後我得到AttributeError的:「TestClass的」對象有沒有屬性「Qlabel」

PyQt : accessing elements from outside the class看到它與只使用obj但不與類。

我想了解如何解決這個問題,以及爲什麼我以前的方法不起作用。任何幫助,將不勝感激!

回答

0

我設法讓它工作。問題基本上在function.py,我用的是self.Qlabel.clear()而不是object.Qlabel.clear(),

這是工作代碼。

function.py

class testClass(object): 
    def functionA(self, object): 
     #doSomething 
     object.Qlabel.clear() 

main.py

class mainClass(object): 
    def __init__(self, parent = something): 
     #initialize something 
     super(mainClass, self).__init__(parent) 
     self.setupUi(self) 

     self.Qlabel.clicked.connect(self.testFunc) 


    def testFunc(self): 
     import function as FT 
     FT.testClass().functionA(self) 
0

在functionA的定義中再添加一個Entry。 例如錯誤的

def functionA(self, mainClassObj): 
    #doSomething 
    self.Qlabel.clear() 

原因是你打電話與您只有一個參數定義它一個額外的argument.Whereas TestClass的功能。

注意:您要啓動Qlabel:

def functionA(self, mainClassObj): #doSomething from PyQt5.QtWidgets import QLabel Qlabel().clear() 這應該爲你工作。

+0

此外,如果你不想通過當前的類對象,然後做下面的變化 FT.testClass()。泛函() – db1912

+0

我已經嘗試了兩個建議,並且出現了另一個錯誤:AttributeError'testClass'對象沒有'Qlabel'屬性。 –

+0

意味着你現在可以調用函數。但Qlabel不是你的testClass的一部分。可以使testClass的這一部分或導入它。你最好導入它並刪除「自我」。字首。例如。從PyQt.QtCore導入* 從PyQt.QtGui導入*並使用Qlabel.clear() – db1912