2017-08-09 8 views
-1

BeispielZugriff auf UI-Elemente von einer anderen Klasse in Python

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) 

Ich habe versucht, meinen PyQt function.py zu main.py verbinden. Es gibt mir dieses TypeError: functionA() nimmt genau 1 Argument (2 gegeben).

Wenn ich das ‚Selbst‘ wegzunehmen in so dass es FT.testClass().functionA() ist, dann bekomme ich Attribute: ‚Testclass‘ -Objekt kein Attribut ‚QLabel‘

ich in PyQt : accessing elements from outside the class sah, dass es mit nur mit obj funktioniert aber nicht mit Klassen.

Ich würde gerne verstehen, wie das zu beheben und auch warum meine vorherige Methode nicht funktioniert. Jede Hilfe wäre willkommen!

Antwort

0

Ich habe es geschafft zu arbeiten. Das Problem war im Grunde genommen in function.py, ich war self.Qlabel.clear() anstelle von object.Qlabel.clear(),

Dies ist der Arbeitscode.

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

In der Definition der FunktionA machen Sie einen weiteren Eintrag. Für z.B.

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

Ursache des Fehlers ist, dass Sie Testclass-Funktion mit einem zusätzlichen argument.Whereas sind rufen Sie es mit einem Argument definieren.

Hinweis: Sie haben QLabel zu initiieren:

def functionA(self, mainClassObj): #doSomething from PyQt5.QtWidgets import QLabel Qlabel().clear() Dies sollte für Sie arbeiten.

+0

Auch wenn Sie nicht wollen, Objekt aktuelle Klasse dann ändern FT.testClass folgende Sie() übergeben. Funktioneine() – db1912

+0

Ich habe beide Vorschläge ausprobiert und bekomme einen weiteren Fehler: AttributError 'testClass' Objekt hat kein Attribut 'Qlabel'. –

+0

bedeutet jetzt, Sie können die Funktion aufrufen. Aber Qlabel ist nicht Teil deiner testClass. Machen Sie diesen Teil von testClass oder importieren Sie ihn. du importierst es besser und entfernst "self". Präfix. Z.B. aus PyQt.QtCore import * aus PyQt.QtGui import * und benutze Qlabel.clear() – db1912

Verwandte Themen