首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在当前文件中使用外部类的构造函数?

如何在当前文件中使用外部类的构造函数?
EN

Stack Overflow用户
提问于 2020-04-12 20:16:25
回答 2查看 30关注 0票数 1

我在design.pyUi_MainWindow中有一个方法setupUi() (它是由PyQt Designer创建的一个非常长的方法)

代码语言:javascript
复制
class Ui_MainWindow(object):
    def setupUi(self, MainWindow): # really long method
        self.xyz
        ...
    ...

并希望将其用作ApplicationWindow类中我的主文件app.py中的一个方法。

我想模仿的是:

代码语言:javascript
复制
class ApplicationWindow:
    def __init__(self, MainWindow, truss, *args, **kwargs):
        self.setupUi(MainWindow)
        [use self.xyz here]
        ...
    def setupUi(self, MainWindow): # same really long method I want here
        ...
    ...

我尝试过的:

代码语言:javascript
复制
from design import Ui_MainWindow

class ApplicationWindow:
    def __init__(self, MainWindow, truss, *args, **kwargs):
        Ui_MainWindow().setupUi(MainWindow) # this works
        [use self.xyz here] # this does not work
        ...
    ...

我想在ApplicationWindow类中使用Ui_MainWindow中的变量self.xyz

但我得到了self.xyzAttributeError

同样,我想把它放在单独的文件中的原因,是因为它太长了。

我确信这是一个简单的修复,因为模块以类似的方式工作。但出于某种原因,它对我不起作用,有什么想法吗?

如何调用函数(一切都在OOP/Functional中):

代码语言:javascript
复制
if __name__ == "__main__":
    import sys
    qapp = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()

    truss = FEModel3D
    app = ApplicationWindow(MainWindow, truss)

    MainWindow.show()
    sys.exit(qapp.exec_())

文件结构:

代码语言:javascript
复制
master
├───app.py
├───...
└───design.py
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-12 20:32:23

您可以通过为UI_MainWindowApplicationWindow创建一个共同的父类(例如ParentWindow)并将setupUi提取到ParentWindow的类方法中来实现这一点。

因此在一个新文件中创建,例如parent.py

代码语言:javascript
复制
class ParentWindow:
  def setupUi(self, window):
    # same definition

现在将ParentWindow导入到这两个类中,并将class UI_MainWindow(object):class ApplicationWindow:分别替换为class UI_MainWindow(ParentWindow)class ApplicationWindow(ParentWindow)

票数 1
EN

Stack Overflow用户

发布于 2020-04-13 12:26:52

我尝试使用一个变量来连接这两个类,并且成功了!

app.py

代码语言:javascript
复制
class ApplicationWindow():
    def __init__(self, MainWindow, truss, *args, **kwargs):
        win = Ui_MainWindow()
        win.setupUi(MainWindow)
        self.xyz = win.xyz

design.py也是一样的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61171308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档