如何在 PyQt4 中从一个 class 访问变量到另一个 class?
How to access variables from one class to another class in PyQt4?
我想从主 window 中获取一个字符串,用于通过单击触发的 window。我知道如何通过将所有语句放入一个 class 中来做到这一点,但现在我正在尝试对每个 window 中的一个 class 做同样的事情。这是代码:
import sys
from PyQt4 import QtGui
class Window(QtGui.QWidget):
def __init__(self, parent=None):
super().__init__()
self.initUI()
def initUI(self):
self.value = QtGui.QLineEdit('23')
self.button = QtGui.QPushButton('Open Dialog')
self.button.clicked.connect(self.openDialog)
vbox = QtGui.QVBoxLayout()
vbox.addWidget(self.value)
vbox.addWidget(self.button)
self.setLayout(vbox)
def openDialog(self):
self.entry = self.value.text()
print(self.entry)
Dialog().exec_()
class Dialog(QtGui.QDialog):
def __init__(self, parent=Window):
super().__init__()
win = Window()
self.text = win.entry
self.label = QtGui.QLabel(self.text)
hbox = QtGui.QHBoxLayout()
hbox.addWidget(self.label)
self.setLayout(hbox)
def main():
app = QtGui.QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
但我收到错误消息“AttributeError: 'Window' object has no attribute 'entry'”而且我不知道任何其他方法尝试修复它。有人可以帮我吗?
这里
win = Window()
self.text = win.entry
您声明了一个新的 window 并访问了它的 entry
字段但是在您的 window class
class Window(QtGui.QWidget):
def __init__(self, parent=None):
super().__init__()
self.initUI()
未构造输入字段。
所以
- 要么你想创建一个新的window,所以你必须把self.entry放在构造函数
上
- 您想在调用 openDialog
后使用现有的 window 访问其 entry
编辑:
也许在这里
class Dialog(QtGui.QDialog):
def __init__(self, parent=Window):
super().__init__()
您正在初始化 class 错误。父构造函数也应该用 parent=Window 调用。然后在对话框中,您可以通过执行 self.parent
来引用 window
在openDialog
方法中创建Dialog
的实例,这样就可以直接访问它的属性了。这样,两个 classes 可以更独立地运行,并且您不需要从 Dialog
class 中访问 Window
class:
def openDialog(self):
dialog = Dialog(self)
dialog.label.setText(self.value.text())
dialog.exec_()
print(dialog.label.text())
class Dialog(QtGui.QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.label = QtGui.QLabel(self)
hbox = QtGui.QHBoxLayout()
hbox.addWidget(self.label)
self.setLayout(hbox)
我想从主 window 中获取一个字符串,用于通过单击触发的 window。我知道如何通过将所有语句放入一个 class 中来做到这一点,但现在我正在尝试对每个 window 中的一个 class 做同样的事情。这是代码:
import sys
from PyQt4 import QtGui
class Window(QtGui.QWidget):
def __init__(self, parent=None):
super().__init__()
self.initUI()
def initUI(self):
self.value = QtGui.QLineEdit('23')
self.button = QtGui.QPushButton('Open Dialog')
self.button.clicked.connect(self.openDialog)
vbox = QtGui.QVBoxLayout()
vbox.addWidget(self.value)
vbox.addWidget(self.button)
self.setLayout(vbox)
def openDialog(self):
self.entry = self.value.text()
print(self.entry)
Dialog().exec_()
class Dialog(QtGui.QDialog):
def __init__(self, parent=Window):
super().__init__()
win = Window()
self.text = win.entry
self.label = QtGui.QLabel(self.text)
hbox = QtGui.QHBoxLayout()
hbox.addWidget(self.label)
self.setLayout(hbox)
def main():
app = QtGui.QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
但我收到错误消息“AttributeError: 'Window' object has no attribute 'entry'”而且我不知道任何其他方法尝试修复它。有人可以帮我吗?
这里
win = Window()
self.text = win.entry
您声明了一个新的 window 并访问了它的 entry
字段但是在您的 window class
class Window(QtGui.QWidget):
def __init__(self, parent=None):
super().__init__()
self.initUI()
未构造输入字段。
所以
- 要么你想创建一个新的window,所以你必须把self.entry放在构造函数 上
- 您想在调用 openDialog 后使用现有的 window 访问其
entry
编辑:
也许在这里
class Dialog(QtGui.QDialog):
def __init__(self, parent=Window):
super().__init__()
您正在初始化 class 错误。父构造函数也应该用 parent=Window 调用。然后在对话框中,您可以通过执行 self.parent
在openDialog
方法中创建Dialog
的实例,这样就可以直接访问它的属性了。这样,两个 classes 可以更独立地运行,并且您不需要从 Dialog
class 中访问 Window
class:
def openDialog(self):
dialog = Dialog(self)
dialog.label.setText(self.value.text())
dialog.exec_()
print(dialog.label.text())
class Dialog(QtGui.QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.label = QtGui.QLabel(self)
hbox = QtGui.QHBoxLayout()
hbox.addWidget(self.label)
self.setLayout(hbox)