class - 将python类拆分为多个文件

标签 class python-3.x module pyqt5

我想知道是否有人能告诉我是否可以将以下代码分成两个 python 类,然后将它们放在两个不同的文件中:

from GUI import mainGUI
from GUI import subwindowGUI

class MyApp(QMainWindow, mainGUI.Ui_MainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.setupUi(self)

        # mainGUI contains QMdiarea in which it opens
        # a subwindow by calling a function MySubWin(self)

        # QMdiarea name is 'body'

        self.OpenSub.triggered.connect(self.MySubWin)

    def MySubWin(self):
        self.MySubWin = QWidget()
        self.MySubWin.setObjectName('Module window')

        self.myTabs = QtabWidget(self.MySubWin)
        self.myTabs.setObjectName('myTabs')

        # now I call the function that will display
        # the gui elements inside this 'Module window'
        self.create_module_gui()

        self.body.addSubWindow(self.MySubWin)
        self.MySubWin.showNormal()

    def create_module_gui(self, *args):
        module_gui = subwindowGUI.Ui_ModuleWindow()
        module_gui.setupUi(module_gui)

        self.myTabs.addTab(module_gui, _('New tab'))
        self.myTabs.setCurrentWidget(module_gui)

正如您从上面的代码中看到的那样,我的函数正在与主窗口 gui 元素进行交互。我想将与此特定模块相关的这些功能移动到一个单独的文件中以进行维护。这就是为什么我要求你帮助我实现这一目标,如果可能的话。在此先感谢,托米斯拉夫。

@梅尔:

如果我将这些功能移动到另一个文件中:
myFunctions.py

class MyFunctions(object):

    def MySubWin(self):
        self.MySubWin = QWidget()
        self.MySubWin.setObjectName('Module window')

        self.myTabs = QtabWidget(self.MySubWin)
        self.myTabs.setObjectName('myTabs')

        # now I call the function that will display
        # the gui elements inside this 'Module window'
        self.create_module_gui()

        self.body.addSubWindow(self.MySubWin)
        self.MySubWin.showNormal()

    def create_module_gui(self, *args):
        module_gui = subwindowGUI.Ui_ModuleWindow()
        module_gui.setupUi(module_gui)

        self.myTabs.addTab(module_gui, _('New tab'))
        self.myTabs.setCurrentWidget(module_gui)

然后我将该文件导入到我的主文件中。
import myFunctions

class MyApp(QMainWindow, mainGUI.Ui_MainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.setupUi(self)

        # mainGUI contains QMdiarea in which it opens
        # a subwindow by calling a function MySubWin(self)

        # QMdiarea name is 'body'

        self.OpenSub.triggered.connect(MyFunctions.MySubWin)

我最终得到的错误是 MyFunctions 对象没有属性主体。

最佳答案

请参阅此解决方案:https://stackoverflow.com/a/47562412/10155767
在你的情况下,不要在 myFunctions.py 中上课.相反,在顶层定义函数。因此myFunctions.py应该看起来像:

def MySubWin(self):
    ...

def create_module_gui(self, *args):
    ...
然后在您的原始文件中,导入类中的函数,如
class MyApp(QMainWindow, mainGUI.Ui_MainWindow):
    from myFunctions import MySubWin, create_module_gui

    def __init__(self, parent=None):
        ...

关于class - 将python类拆分为多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35059904/

相关文章:

Javascript 这不指向正确的对象

python-3.x - 从字典中删除值

css - 使用另一个类中的属性设置 HTML 元素的样式

java - 尝试使用另一个类中的方法时,线程 "main"java.lang.NullPointerException 中出现异常?

python - 生成的最短唯一 ID

python - 即使在重建 .pyc 文件后,Bad magic number 错误仍然存​​在

ruby - 模块中的动态方法?

objective-c - Objective-C 中 Swift 的 canImport 类比

module - 在 Julia 的另一个模块中包含一个模块

c++ - 加载实例时开始 C++ 开发人员 EXC_BAD_ACCESS 错误