from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys, os, time
class SetName(QWidget):
def __init__(self):
QWidget.__init__(self)
self.show()
toplayout = QVBoxLayout()
self.setWindowTitle('Personal Info')
self.form_layout = QFormLayout()
self.setLayout(self.form_layout)
self.line_edit_param = QLineEdit(self)
self.line_edit_param.setPlaceholderText("Write Here")
self.form_layout.addRow('Write Name', self.line_edit_param)
toplayout.addLayout(self.form_layout)
self.setFocus()
class LearnApp(QDialog):
def __init__(self):
super(QDialog, self).__init__()
self.setWindowTitle("LearnApp")
self.active = False
close_button = QPushButton("Close")
close_button.clicked.connect(self.close)
self.check_button = QPushButton("Check")
self.check_button.clicked.connect(self.set_data)
self.tr = QTextEdit()
self.tr.setReadOnly(True)
# layout
layout = QHBoxLayout()
#layout.addWidget(self.button3)
sub_layout = QVBoxLayout()
sub_layout.addWidget(self.check_button)
sub_layout.addWidget(close_button)
layout.addLayout(sub_layout)
layout.addWidget(self.tr)
self.setLayout(layout)
self.setFocus()
def set_data(self):
print "in set_data"
SetName()
app = QApplication(sys.argv)
dialog = LearnApp()
dialog.show()
app.exec_()这就是我正在尝试的密码。如果用toplayout = QGridLayout()编辑它,程序可以正常工作,但使用toplayout = QVBoxLayout()时,它会给出消息QLayout::addChildLayout: layout "" already has a parent并只闪烁新窗口。有什么问题吗?我该怎么处理呢?我想用QVBoxLayout代替QGridLayout
发布于 2014-10-28 18:19:17
首先,新窗口立即消失,因为您没有存储对它的引用。您需要在您的LearnApp类中存储对实例的引用,或者将其父对象存储到set_data()之外的另一个Qt对象中,如果您希望它继续存在的话。
有关布局的错误消息并不是因为您选择布局而发生的,而是因为您正在调用
self.setLayout(self.form_layout)然后
toplayout.addLayout(self.form_layout)第一个调用将布局分配给SetName实例,但这样做也使实例成为self.form_layout的父级。第二个调用试图将相同的布局添加到toplayout中,并将其设置为父级,但是Qt看到self.form_layout已经有了一个父级(即正在其他地方使用)。这就是错误信息试图告诉您的。
我怀疑你不是self.setLayout(self.form_layout),而是打算写一些类似的东西
self.setLayout(toplayout)https://stackoverflow.com/questions/26614310
复制相似问题