2016-12-28 4 views
0

Ich habe 2 neue Widgets/Windows in pyqt, von meinem Hauptfenster aus erstellt. Jetzt möchte ich meine Methoden in der Hauptfenster-Klasse auf meine neuen Widgets zugreifen. Wie kann ich das machen?Zugriffsmethoden von einer anderen Klasse PyQt4

Hier ist mein Code:

from UI_NewProject import Ui_widget 
from UI_OpenNew import Ui_Form 

# Main Class 
class MainClass(QtGui.QMainWindow, UI_Main.Ui_MainWindow): 
def __init__(self, parent=None): 
    super(MainClass, self).__init__(parent) 
    self.setupUi(self) 
    self.openFile.triggered.connect(self.on_pushButton_clicked) 

def on_pushButton_clicked(self): 
    connectClass = openNew(self) 
    connectClass.show() 

def funcfromMain(self): 
    filters = ('Data Files (*.csv *.txt *.xls *.xml *.xlsx *.xlsm)',) 
    path, filter = QtGui.QFileDialog.getOpenFileNameAndFilter(
     self, 'Open File', '', ';;'.join(filters)) 
    self.nameFile = os.path.basename(path) 

    if (".csv" or ".txt") in path: 
     with open(path, 'rb') as drate: 
      self.Datas = pd.read_csv(drate, index_col=0) 


    if (".xls" or ".xml" or ".xlsx" or ".xlsm") in path: 
     with open(path, 'rb') as drate: 
      self.Datas = pd.read_excel(drate, index_col=0) 


#New Widget/Window class 1 
class openNew(QtGui.QMainWindow, Ui_Form): 
    #from UI_OpenNew import Ui_Form 

    def __init__(self, parent = None): 
     super(openNew, self).__init__(parent) 
     self.setAttribute(QtCore.Qt.WA_DeleteOnClose) 
     self.setupUi(self) 

     # Create New Project 
     self.pushButton_2.clicked.connect(self.on_Button_clicked) 
     self.pushButton.clicked.connect(MainClass.funcfromMain) #this is funtion in MainClass and I want to access it Here 

    def on_Button_clicked(self): 
     Win = NewProject(self) 
     Win.show() 

#New Widget/Window class 2 
class NewProject(QtGui.QMainWindow, Ui_widget): 
    #from UI_NewProject import Ui_widget 

    def __init__(self, parent = None): 
     super(NewProject, self).__init__(parent) 
     self.setAttribute(QtCore.Qt.WA_DeleteOnClose) 
     self.setupUi(self) 

self.pushButton_2 and self.pushButton sind aus den entsprechenden UI-Dateien.

Jetzt möchte ich Schaltflächen wie diese in den neuen UI-Dateien mit Methoden in MainClass verbinden, also irgendwelche Ideen, wie ich das erreichen kann?

Fehler: (mit parent.func)

TypeError: QFileDialog.getOpenFileNameAndFilter(QWidget parent=None, str caption='', str directory='', str filter='', str initialFilter='', QFileDialog.Options options=0) -> (str, str): argument 1 has unexpected type 'bool' 

Update 1: Ich versuchte Mixin-Klasse verwenden, aber meine Hauptdatei ist so groß, und ich möchte wie 6-7 Methoden der wichtigsten in den neuen Widgets so , irgendwelche Ideen, wie ich das angehen kann?

+0

welche Fehler? wir können nicht in deinen Gedanken lesen. Fügen Sie immer eine vollständige Fehlermeldung (Rückverfolgung) hinzu. – furas

+0

haben Sie versucht, "Eltern" zu verwenden - dh. 'parent.funcfromMain' – furas

+0

@eyllanesc, Ja, ich habe die Konzepte durchgelesen, jetzt frage ich mich, ob ich das überhaupt nicht tun kann, ich habe das nur gepostet, in der Hoffnung, irgendwelche Ideen zu bekommen, wie ich das angehen soll! – learncode

Antwort

1

In Mainclass müssen Sie die Verbindung machen: connectClass.pushButton.clicked.connect(self.funcfromMain)

from PyQt4 import QtGui 


from UI_NewProject import Ui_widget 
from UI_OpenNew import Ui_Form 

# New Widget/Window class 2 
class NewProject(QtGui.QMainWindow, Ui_widget): 
    # from UI_NewProject import Ui_widget 

    def __init__(self, parent=None): 
     super(NewProject, self).__init__(parent) 
     self.setAttribute(QtCore.Qt.WA_DeleteOnClose) 
     self.setupUi(self) 


# New Widget/Window class 1 
class openNew(QtGui.QMainWindow, Ui_Form): 
    # from UI_OpenNew import Ui_Form 

    def __init__(self, parent=None): 
     super(openNew, self).__init__(parent) 
     self.setAttribute(QtCore.Qt.WA_DeleteOnClose) 
     self.setupUi(self) 

     # Create New Project 
     self.pushButton_2.clicked.connect(self.on_Button_clicked) 

    def on_Button_clicked(self): 
     Win = NewProject(self) 
     Win.show() 


# Main Class 
class MainClass(QtGui.QMainWindow, UI_Main.Ui_MainWindow): 
    def __init__(self, parent=None): 
     super(MainClass, self).__init__(parent) 
     self.setupUi(self) 
     self.openFile.triggered.connect(self.on_pushButton_clicked) 

    def on_pushButton_clicked(self): 
     connectClass = openNew(self) 
     connectClass.pushButton.clicked.connect(self.funcfromMain) 
     connectClass.show() 

    def funcfromMain(self): 
     pass 
+0

Danke !, Yeah das neue Widget 1 funktioniert, aber was ist mit dem New Widget 2, der Zeile 'Win.show()' es zeigt nur das Widget 1 statt Widget 2? – learncode

+0

Danke! Bekam einen einfachen Fehler! – learncode

Verwandte Themen