从另一个类PyQt4访问方法

2024-04-30 03:05:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我在pyqt中从我的主窗口创建了两个新的widget/windows。现在我想访问mainwindow类中的方法来访问我的新小部件。我该怎么做?在

这是我的代码:

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文件。在

现在我想把新UI文件中的这些按钮连接到MainClass中的方法,那么我有什么想法可以实现这一点?在

错误:(使用parent.func

^{pr2}$

更新1: 我尝试过使用Mixin类,但是我的主文件太大了,我想在新的小部件中使用6-7个main方法,那么,有什么想法可以帮助我实现这一点吗?在


Tags: pathfromimportselfuiinitdefwidget
1条回答
网友
1楼 · 发布于 2024-04-30 03:05:12

在主类中,必须建立连接: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

相关问题 更多 >