2013-02-23 4 views
1

Я хочу вызвать форму ниже («Первый скрипт») из другого сценария («Второй скрипт»), и я хочу, чтобы второй скрипт заполнил поле метки (предположительно, используя свойство setText Qlabel) с новой информацией.QWidget: должен построить QApplication перед QPaintDevice в сценарии Python

Следующие 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() 

ответ

2

Это сообщение об ошибке сообщает: вы должны создать QApplication, прежде чем сможете создать форму. В основном, formm() из первого сценария содержит все, что вы должны сделать:

  1. Создать объект QApplication
  2. Создание виджетов, чтобы показать
  3. Введите цикл событий с помощью 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() 
+0

Спасибо. Когда я попробовал код, который вы отправили, я получил сообщение об ошибке «неверное синтаксическое сообщение» для последней строки. Я попытался изменить «app.exec()» на «app.exec_()», но это сгенерировало это сообщение об ошибке: «SyntaxError:« return »вне функции« Есть ли у вас какие-либо идеи о том, как решить эту проблему? Еще раз спасибо, marc – user235218

+0

Дорогой Франк Остерфилд, я забыл указать ваше имя в своем ответе. Спасибо. Когда я попробовал код, который вы отправили, я получил сообщение об ошибке «неверное синтаксическое сообщение» для последней строки. Я попытался изменить «app.exec()» на «app.exec_()», но это сгенерировало это сообщение об ошибке: «SyntaxError:« return »вне функции« Есть ли у вас какие-либо идеи о том, как решить эту проблему? Еще раз спасибо, marc – user235218

+0

Форма появилась после того, как я сменил exec на exec_ и запомнил импорт модулей qt. Но ярлык не обновляется. Теперь сообщение об ошибке: AttributeError: объект 'Form' не имеет атрибута 'prefix_label' – user235218