我想从主窗口中获取一个字符串,以便在通过单击触发的窗口中使用。我知道如何通过将所有语句放入一个类来实现它,但现在我尝试用每个窗口一个类来做同样的事情。这是代码:
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'对象没有属性'条目' "而我也不知道如何尝试修复它。有人可以帮我吗?
答案 0 :(得分:2)
在Dialog
方法中创建openDialog
的实例,以便您可以直接访问其属性。这样,这两个类可以更独立地运行,您不需要从Window
类中访问Dialog
类:
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)
答案 1 :(得分:1)
下面
win = Window()
self.text = win.entry
您声明一个新窗口并访问其entry
字段,但在您的窗口类
class Window(QtGui.QWidget):
def __init__(self, parent=None):
super().__init__()
self.initUI()
未构建输入字段。
所以
entry
醇>
编辑:
也许在这里
class Dialog(QtGui.QDialog):
def __init__(self, parent=Window):
super().__init__()
你正在错误地初始化这个类。应该使用parent = Window调用父构造函数。然后,从对话框内部,您可以通过执行self.parent