LINUX.ORG.RU

pyqt, qwizard и передача переменной

 ,


0

1

Имеется несколько страниц QWizardPage принадлежащие QWizard. В одной из них происходит выбор пути для установки. При создании объекта она инициализируется некоторым произвольным значением. При нажатии на кнопку «обзор» заполняется её значение. Но при переходе на следующую страницу она снова содержит значение, которое её было присвоено при объявлении. Как можно передать переменную между страницами(функциями)?

from PyQt4 import QtGui, QtCore
import sys
 
 
class Test(QtGui.QWizard):
    def __init__(self, parent=None):
        QtGui.QWizard.__init__(self, parent)
        self.path = unicode("1")
        self.addPage(self.firstpage())
        self.addPage(self.secondpage())
 
    def firstpage(self):
        page = QtGui.QWizardPage()
        nameButton = QtGui.QPushButton(u"Изменить")
        nameLineEdit = QtGui.QLineEdit()
        self.connect(nameButton, QtCore.SIGNAL('clicked()'), lambda: self.setDir(nameLineEdit)) #тут по клику выполняется мой слот
        layout = QtGui.QHBoxLayout()
        layout.addWidget(nameLineEdit)
        layout.addWidget(nameButton)
        page.setLayout(layout)
        return page
 
    def secondpage(self):
        page = QtGui.QWizardPage()
        page.setTitle(unicode(self.path)) #здесь оно содержит значение 123
        return page
 
    def setDir(self, nameLineEdit):
        self.path = "New Path" #здесь должно происходить замещение новым путем. 
                               #Но он действует только на одну страницу. Может локалки напутаны?
        nameLineEdit.setText(self.path)
 
app = QtGui.QApplication(sys.argv)
window = Test()
window.show()
sys.exit(app.exec_())

    def initializePage(self, ident):
        if ident == 1:
            self.page(ident).setTitle(unicode(self.path))
anonymous
()

#здесь должно происходить замещение новым путем.
#Но он действует только на одну страницу. Может локалки напутаны?

А ты добавь отладочный вывод в консоль в функции firstpage и secondpage, посмотри когда они вызываются.

anonymous
()
Ответ на: комментарий от anonymous

А провести аналогию по названию функции никак? Посмотри доки по PyQt класс QWizardPage и найди у него метод registerField и field.

Я тебе дал наводку, куда смотреть.

grondek
()
Ответ на: комментарий от grondek

Я понял это. Зарегистрировал поле на первой странице, на второй оно снова не имеет значения. ЧЯДНТ?

TX4D
() автор топика
Ответ на: комментарий от grondek

Простио ссылка на QtCore.QVariant object меняется с каждой страницей и на одной странице поле имеет значение, а на другой - нет.

TX4D
() автор топика
Ответ на: комментарий от TX4D

Делаем так:

1. В конструкторе первой страницы (там добавлена строка ввода QLineEdit):

    registerField( "field1", ui->lineEdit );
    setField( "field1", ui->lineEdit->text() );

2. В переопределенном методе QWizardPage::initializePage добавляем (на странице добавлен QLabel):

ui->label->setText( field( "field1" ).toString() );

grondek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.