Qt QWidget:必须在Python脚本中的QPaintDevice之前构造QApplication

Qt QWidget:必须在Python脚本中的QPaintDevice之前构造QApplication,qt,pyside,qdialog,qlabel,Qt,Pyside,Qdialog,Qlabel,我想从另一个脚本(“第二个脚本”)调用下面的表单(“第一个脚本”),并希望第二个脚本用新信息填充标签字段(可能使用Qlabel的setText属性) 第二个脚本中的以下7行首先生成原始窗口,而不更新标签;但在关闭未更新的窗口后,会出现一个新窗口,其中标签已更新。我不知道为什么会先出现未更新的窗口 import Form2use4ques4stackoverflow_2013_02_23_am_09_33_45_ app = QApplication(sys.argv) nuform = Form

我想从另一个脚本(“第二个脚本”)调用下面的表单(“第一个脚本”),并希望第二个脚本用新信息填充标签字段(可能使用Qlabel的setText属性)

第二个脚本中的以下7行首先生成原始窗口,而不更新标签;但在关闭未更新的窗口后,会出现一个新窗口,其中标签已更新。我不知道为什么会先出现未更新的窗口

import Form2use4ques4stackoverflow_2013_02_23_am_09_33_45_
app = QApplication(sys.argv)
nuform = Form2use4ques4stackoverflow_2013_02_23_am_09_33_45_.Form()
nuform.prefix_label.setText('newtext')
nuform.show()
#return app.exec_()
app.exec_()
                                            Marc

# -*- coding: latin-1 -*-
"""
Form2use4ques4stackoverflow_2013_02_23_am_09_33_45_.py

"""

import sys
from PyQt4 import QtCore
from PyQt4 import QtGui
from PyQt4.QtCore import (Qt, SIGNAL)
from PyQt4.QtGui import (QApplication, QDialog, QHBoxLayout, QLabel,
        QPushButton)


class Form(QDialog):

    def __init__(self, parent=None):
        super(Form, self).__init__(parent)

        self.initUI()

    def initUI(self):
        okButton01 = QtGui.QPushButton("OK")
        cancelButton01 = QtGui.QPushButton("Cancel")

        prefix_label = QtGui.QLabel('Prefix') 
        self. prefix_label = prefix_label 

        hbox_prefix_digit_iterations = QtGui.QHBoxLayout()
        hbox_prefix_digit_iterations.addWidget(prefix_label)

        hbox_btnsOK_cancel = QtGui.QHBoxLayout()
        hbox_btnsOK_cancel.addStretch(1)
        hbox_btnsOK_cancel.addWidget(okButton01)
        hbox_btnsOK_cancel.addWidget(cancelButton01)

        vbox0 = QtGui.QVBoxLayout()
        vbox0.addLayout(hbox_prefix_digit_iterations)
        vbox0.addStretch(1)
        vbox0.addLayout(hbox_btnsOK_cancel)

        self.setLayout(vbox0)

        self.setGeometry(300, 300, 600, 300) #class PySide.QtCore.QRectF(left, top, width, height)   http://srinikom.github.com/pyside-docs/PySide/QtCore/QRectF.html#PySide.QtCore.QRectF
        self.setWindowTitle('Duplicate Code Strings W/Increasing Numbers')  
        self.show()


def formm():
    app = QApplication(sys.argv)
    form = Form()
    form.show()
    app.exec_()


if 1 == 1:
    formm()

错误消息告诉它:必须先创建QApplication,然后才能创建表单。 基本上,第一个脚本中的formm()包含您必须执行的所有操作:

  • 创建QApplication对象
  • 创建要显示的小部件
  • 通过QApplication::exec()进入事件循环
  • 在第二个脚本的上下文中,它的内容如下:

    import Form2use4ques4stackoverflow_2013_02_23_am_09_33_45_
    app = QApplication(sys.argv)
    nuform = Form2use4ques4stackoverflow_2013_02_23_am_09_33_45_.Form()
    nuform.prefix_label.setText('newtext')
    nuform.show()
    return app.exec()
    

    非常感谢。当我尝试您发布的代码时,我在最后一行收到一条“无效语法错误”消息。我尝试将“app.exec()”更改为“app.exec_389;()”,但这产生了一条错误消息:“SyntaxError:‘return’outside function”您对如何解决这个问题有什么想法吗?再次感谢你,亲爱的弗兰克·奥斯特菲尔德,我忘了在回复中写上你的名字。非常感谢。当我尝试您发布的代码时,我在最后一行收到一条“无效语法错误”消息。我尝试将“app.exec()”更改为“app.exec_389;()”,但这产生了一条错误消息:“SyntaxError:‘return’outside function”您对如何解决这个问题有什么想法吗?再次感谢,在我将exec改为exec_uu并记住导入qt模块后,表单出现了。但是标签没有更新。现在的错误消息是:AttributeError:“Form”对象没有属性“prefix\u label”亲爱的Frank:我通过修复第一个脚本修复了AttributeError问题。三个问题/评论:(1)我删除了“return”一词,因为它触发了一条错误消息:SyntaxError:“return”在函数外部;(2) 行“nuform.show()”似乎没有效果,即它不会改变显示的内容;(3) 该代码(我将在下一条注释中添加该代码,因为我在该注释中没有足够的空间)生成一个不包含更新标签的窗口,但在我关闭该窗口后,另一个窗口将出现标签更新的窗口--为什么会发生这种情况?代码如下:“从PyQt4导入系统从PyQt4导入QtCore从PyQt4导入QtGui从PyQt4.QtCore导入(Qt,信号)从PyQt4.QtGui导入(QApplication,QDialog,QHBoxLayout,QLabel,QPushButton)导入Form2use4ques4stackoverflow_2013_02_23_am_0933_45_app=QApplication(sys.argv)numform=Form2use4ques4stackoverflow_2013_02_23_am_09_33_45_.Form()numform.prefix_label.setText('newtext')numform.show()#return app.exec(app.exec)“