0
我有一個包含幾個輔助方法和屬性引擎模塊:在PyQT中如何打開有權訪問父級屬性的子窗口?
engine.py
class World:
def __init__(self):
# stuff
def foo(a, b):
c = a + b # trivial example
return c
然後我已經結合有UI文件main.py(在QtDesigner創建並轉換爲的.py使用腳本我有):
main.py
from PyQt4 import QtGui
import design1
import design2
import engine
class MainWindow(QtGui.QMainWindow, design1.Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.world = engine.World()
self.new_window_button.clicked.connect(self.open_new_window)
def open_new_window(self):
self.window_to_open = ChildWindow(self)
self.window_to_open.show()
class ChildWindow(QtGui.QMainWindow, design2.Ui_MainWindow):
def __init__(self, parent):
super(ChildWindow, self).__init__(parent)
self.setupUi(self)
print(self.world.foo(1, 2)) # trivial example
def main():
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
如果我拿出print
一行,ChildWindow
開放罰款。但它在我的錯誤:
AttributeError: 'ChildWindow' object has no attribute 'world'
我知道我在做一些愚蠢的,但我無法弄清楚。
編輯main.py
from PyQt4 import QtGui
import design1
import design2
import engine
class MainWindow(QtGui.QMainWindow, design1.Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.world = engine.World()
self.new_window_button.clicked.connect(self.open_new_window)
def open_new_window(self):
self.window_to_open = ChildWindow(self)
self.window_to_open.show()
class ChildWindow(QtGui.QMainWindow, design2.Ui_MainWindow):
def __init__(self, parent):
super(ChildWindow, self).__init__(parent)
self.setupUi(self)
print(self.parent().world.foo(1, 2)) # trivial example
def main():
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
我現在得到的錯誤:
TypeError: foo() takes 2 positional arguments but 3 were given
感謝,並感謝清理我的OP。爲了保持代碼的其餘部分乾淨並防止重複,你會推薦做一些類似'self.child_world = self.parent()。world'嗎?我認爲最好給這個「世界」一個不同的名字,以防止它與父母的混淆。 – drewd423
使用您顯示的代碼訪問父級方法。這個父親不是遺產之一,它是一個父親給予消除其他元素的有效方式的記憶 – eyllanesc
有些事情還是不對的。我現在得到一個新的錯誤,看到更新的OP。 – drewd423