2016-12-28 3 views
0

Я создал 2 новых виджета/окна в pyqt, из своего главного окна. Теперь я хотел бы получить доступ к моим методам в классе mainwindow к моим новым виджетам. Как я могу это сделать?Способы доступа из другого класса PyQt4

Вот мой код:

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 взяты из соответствующих файлов пользовательского интерфейса.

Теперь я хочу подключить такие кнопки в новых файлах пользовательского интерфейса к методам в MainClass, поэтому любые идеи о том, как я могу это достичь?

Ошибка: (с 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: Я попытался с помощью подмешать класс, но мой основной файл является настолько большим, и я хочу, как 6-7 методов основных в новых виджетах так , какие-либо идеи о том, как я могу подойти к этому?

+0

какие ошибки? мы не можем читать в тебе. Всегда добавляйте полное сообщение об ошибке (Traceback). – furas

+0

Вы пытались использовать 'parent' - т.е. 'parent.funcfromMain' – furas

+0

@eyllanesc, Да, я прочитал концепции, теперь мне интересно, не могу ли я вообще этого сделать, я просто разместил это в надежде получить любые идеи о том, как подойти к этому! – learncode

ответ

1

В MainClass вы должны сделать соединение: 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

Спасибо !, Да, новый виджет 1 работает, но как насчет New Widget 2, строка 'Win.show()' просто показывает виджет 1 вместо виджета 2? – learncode

+0

Спасибо! Получил это простую ошибку! – learncode

Смежные вопросы