首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用QGridLayout而不是QVBoxLayout

使用QGridLayout而不是QVBoxLayout
EN

Stack Overflow用户
提问于 2014-10-28 17:07:16
回答 1查看 458关注 0票数 0
代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-28 18:19:17

首先,新窗口立即消失,因为您没有存储对它的引用。您需要在您的LearnApp类中存储对实例的引用,或者将其父对象存储到set_data()之外的另一个Qt对象中,如果您希望它继续存在的话。

有关布局的错误消息并不是因为您选择布局而发生的,而是因为您正在调用

代码语言:javascript
复制
self.setLayout(self.form_layout)

然后

代码语言:javascript
复制
toplayout.addLayout(self.form_layout)

第一个调用将布局分配给SetName实例,但这样做也使实例成为self.form_layout的父级。第二个调用试图将相同的布局添加到toplayout中,并将其设置为父级,但是Qt看到self.form_layout已经有了一个父级(即正在其他地方使用)。这就是错误信息试图告诉您的。

我怀疑你不是self.setLayout(self.form_layout),而是打算写一些类似的东西

代码语言:javascript
复制
self.setLayout(toplayout)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26614310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档