2016-08-30 11 views
0

Benötigen Sie Hilfe zum Lesen und Schreiben von GUI-Elementen aus der Unterklasse. Der Code:Pyqt5 Zugriff auf GUI-Elemente aus der Unterklasse

UI element: 
[] doABC 

# main.py 
import mySubclass 

class myAppController(QtWidgets.QMainWindow): 

    def __init__(self): 
     super(myAppController, self).__init__() 

     # load view 
     uifile = 'myApp.ui' 
     uic.loadUi(uifile, self) 

     # I can access UI elements like that 
     self.pb_Verify.clicked.connect(self.slot_verify) # for slot in main.py 

     # Calling slot from mySubclass 
     self.pb_EliminateVerifErrors.clicked.connect(mySubclass.fixErrors) 

# Show Main window 
if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    window = myAppController() 
    window.show() 
    sys.exit(app.exec_()) 

# mySubclass.py - separate file 
def fixErrors(self): 
    # here I want to check state of checkbox 
    if doABC.isChecked(): 

Das Problem ist, dass self.doABC.isChecked() ist in diesem Fall nicht funktioniert. Ich habe auch versucht, zusätzliche Parameter mit Steckplatz Anruf von main.py einschließlich self oder self.doABC übergeben, aber es funktioniert nicht auf diese Weise. Auch der Zugriff auf main.doABC oder super().doABC ist keine Option.

Getan viele Suche auf Google aber nichts passt zu meinem Fall.

Mein Level ist Anfänger in der GUI-Programmierung, so dass ich nicht weiß, heiß es sein soll.

Antwort

0

Ihr Problem ist, dass mysubclass einen Verweis auf doABC benötigt, um es zu überprüfen.

Hier ist ein funktionierendes Beispiel:

main.py Datei

#!python3 
# main.py 
import mySubclass 
import sys 
from PyQt5 import QtWidgets, uic 


class myAppController(QtWidgets.QMainWindow): 

    def __init__(self): 
     super(myAppController, self).__init__() 

     # load view 
     uifile = 'myApp.ui' 
     uic.loadUi(uifile, self) 

     # I can access UI elements like that 
     # self.pb_Verify.clicked.connect(self.slot_verify) # for slot in main.py 

     # Calling slot from mySubclass 
     self.pb_EliminateVerifErrors.clicked.connect(self.EliminateErrors) 

    def EliminateErrors(self): 
     mySubclass.fixErrors(self.doABC) 

# Show Main window 
if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    window = myAppController() 
    window.show() 
    sys.exit(app.exec_()) 

Hier habe ich eine Klassenfunktion durch das Signal aufgerufen werden und einen Verweis auf doABC passieren.

mySubclass.py

# mySubclass.py - separate file 
def fixErrors(doABC): 
    # here I want to check state of checkbox 
    if doABC.isChecked(): 
     print("Works!") 

Hier nahm ich selbst aus den Funktionsargumente, da es nicht eine Klasse-Funktion ist.

Das war's! Du warst ziemlich nah dran!

Verwandte Themen