我在setupUi()
的{{1}}中有一个方法Ui_MainWindow
(这是PyQt Designer创建的非常长的方法)
design.py
,并希望将其用作class Ui_MainWindow(object):
def setupUi(self, MainWindow): # really long method
self.xyz
...
...
类的主文件app.py
中的方法。
我想模仿的东西:
ApplicationWindow
我尝试过的事情:
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
...
...
类中使用self.xyz
中的变量Ui_MainWindow
。
但是我得到ApplicationWindow
的{{1}}。
同样,我希望将其保存在单独的文件中是因为它很长。
我确信这是一个简单的修复,因为模块以类似的方式工作。但是出于某种原因,它对我不起作用,有什么想法吗?
我如何调用函数(一切都在OOP / Functional中):
AttributeError
文件结构:
self.xyz
答案 0 :(得分:1)
您可以通过为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)
。
答案 1 :(得分:0)
我尝试使用变量来连接两个类,并且它起作用了!
app.py
class ApplicationWindow():
def __init__(self, MainWindow, truss, *args, **kwargs):
win = Ui_MainWindow()
win.setupUi(MainWindow)
self.xyz = win.xyz
design.py
相同。