2016-12-28 112 views
0

我已經在pyqt中創建了2個新窗口小部件/窗口,從我的主窗口創建。現在我想在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是從相應的UI文件。

現在我想在New UI文件中將這些按鈕連接到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' 

更新1: 我試圖用混合類,但我的主要文件是這麼大,我要像在新部件等等的主要方法6-7 ,我可以如何處理這個問題的任何想法?

+0

有哪些誤區?我們無法在您的腦海中讀到。始終添加問題完整的錯誤消息(Traceback)。您是否嘗試使用「父母」 - 即, – furas

+0

。 '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的作品,但新的小工具2,'Win.show()'行它只是顯示了Widget 1而不是Widget 2? – learncode

+0

謝謝!有一個簡單的錯誤! – learncode