我在design.py的Ui_MainWindow中有一个方法setupUi() (它是由PyQt Designer创建的一个非常长的方法)
class Ui_MainWindow(object):
def setupUi(self, MainWindow): # really long method
self.xyz
...
...并希望将其用作ApplicationWindow类中我的主文件app.py中的一个方法。
我想模仿的是:
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
...
...我尝试过的:
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.xyz的AttributeError。
同样,我想把它放在单独的文件中的原因,是因为它太长了。
我确信这是一个简单的修复,因为模块以类似的方式工作。但出于某种原因,它对我不起作用,有什么想法吗?
如何调用函数(一切都在OOP/Functional中):
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_())文件结构:
master
├───app.py
├───...
└───design.py发布于 2020-04-12 20:32:23
您可以通过为UI_MainWindow和ApplicationWindow创建一个共同的父类(例如ParentWindow)并将setupUi提取到ParentWindow的类方法中来实现这一点。
因此在一个新文件中创建,例如parent.py
class ParentWindow:
def setupUi(self, window):
# same definition现在将ParentWindow导入到这两个类中,并将class UI_MainWindow(object):和class ApplicationWindow:分别替换为class UI_MainWindow(ParentWindow)和class ApplicationWindow(ParentWindow)。
发布于 2020-04-13 12:26:52
我尝试使用一个变量来连接这两个类,并且成功了!
app.py
class ApplicationWindow():
def __init__(self, MainWindow, truss, *args, **kwargs):
win = Ui_MainWindow()
win.setupUi(MainWindow)
self.xyz = win.xyzdesign.py也是一样的。
https://stackoverflow.com/questions/61171308
复制相似问题