Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 15, 2008 16:30:22

The gray Cardinal
От:
Зарегистрирован: 2007-03-07
Сообщения: 422
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4, путаница с QVariant

Есть такой пример:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui, QtCore

class MainWindow(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.move(300, 300)
self.setWindowTitle(u'QSettings')

boxlay = QtGui.QHBoxLayout(self)
frame = QtGui.QFrame(self) # фрейм
frame.setFrameShape(QtGui.QFrame.StyledPanel)
frame.setFrameShadow(QtGui.QFrame.Raised)
boxlay.addWidget(frame)

gridlay = QtGui.QGridLayout(frame)
label = QtGui.QLabel(u'Замените текст ниже на свой:', frame)
gridlay.addWidget(label, 0, 0)
self.edit = QtGui.QLineEdit(u'', frame)
gridlay.addWidget(self.edit, 1, 0)

self.settings = QtCore.QSettings('test', 'testApp')

def closeEvent(self, event):
val = QtCore.QVariant(self.edit.text())
print val.toString().toUtf8()
self.settings.setValue('text', val)

if __name__=="__main__":
app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
Пример выводит окошко с полем ввода, содержимое которого я хочу сохранить с помощью QSettings при закрытии окна. При сохранении ругается так:
QVariant::load(QDataStream &s): type builtin_function_or_method unknown to QVariant.
Не понимаю, что я сделал здесь неправильно.



Офлайн

#2 Ноя. 15, 2008 18:13:11

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

pyQT4, путаница с QVariant

УМВР (по крайней мере, никакого трейсбека).

Debian lenny, PyQt 4.4.2, Qt 4.4.3

P.S. На будущее, не плохо бы показывать полный трейсбек
P.P.S. Небольшой патчик ;)

--- qtgc.py.orig	2008-11-15 22:11:18.490921470 +0600
+++ qtgc.py 2008-11-15 22:10:36.598922656 +0600
@@ -8,6 +8,8 @@
QtGui.QWidget.__init__(self)
self.move(300, 300)
self.setWindowTitle(u'QSettings')
+
+ self.settings = QtCore.QSettings('test', 'testApp')

boxlay = QtGui.QHBoxLayout(self)
frame = QtGui.QFrame(self) # фрейм
@@ -18,15 +20,16 @@
gridlay = QtGui.QGridLayout(frame)
label = QtGui.QLabel(u'Замените текст ниже на свой:', frame)
gridlay.addWidget(label, 0, 0)
- self.edit = QtGui.QLineEdit(u'', frame)
+ self.edit = QtGui.QLineEdit(self.settings.value('text').toString(), frame)
gridlay.addWidget(self.edit, 1, 0)

- self.settings = QtCore.QSettings('test', 'testApp')
+

def closeEvent(self, event):
val = QtCore.QVariant(self.edit.text())
- print val.toString().toUtf8()
self.settings.setValue('text', val)
+ print u"Settings: %s" % unicode(self.settings.value('text').toString())
+

if __name__=="__main__":
app = QtGui.QApplication(sys.argv)



Офлайн

#3 Ноя. 15, 2008 18:17:10

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

pyQT4, путаница с QVariant

Кстати, зачёт последним (AFAIR, The gray Cardinal и 124bit) вопрошающим по теме pyqt4, что указывают полноценный демо-код, сильно-сильно облегчают жизнь отвечающему.



Офлайн

#4 Ноя. 15, 2008 18:59:04

The gray Cardinal
От:
Зарегистрирован: 2007-03-07
Сообщения: 422
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4, путаница с QVariant

j2a
P.S. На будущее, не плохо бы показывать полный трейсбек
Это единственное сообщение (одна строка), я его и привёл.
Твои исправления не помогают (да собственно, они и несущественны), получаю всё то же “QVariant::load(QDataStream &s): type builtin_function_or_method unknown to QVariant.”.
Не прокатывает строка “self.settings.setValue('text', val)”.



Офлайн

#5 Ноя. 15, 2008 19:02:51

The gray Cardinal
От:
Зарегистрирован: 2007-03-07
Сообщения: 422
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4, путаница с QVariant

Сейчас заменил в конструкторе QSettings имя приложения (“testApp”) на чуть-чуть другое и вроде всё пошло.
Это значит, что я в процессе отладки просто умудрился записать в свой параметр “text” что-то шокирующее библиотеку :). Уж не знаю, что это было :).



Офлайн

#6 Ноя. 15, 2008 19:15:46

The gray Cardinal
От:
Зарегистрирован: 2007-03-07
Сообщения: 422
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4, путаница с QVariant

j2a
Спасибо за помощь :).



Офлайн

#7 Ноя. 15, 2008 19:53:18

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

pyQT4, путаница с QVariant

The gray Cardinal
Сейчас заменил в конструкторе QSettings имя приложения (“testApp”) на чуть-чуть другое и вроде всё пошло.
Это значит, что я в процессе отладки просто умудрился записать в свой параметр “text” что-то шокирующее библиотеку :). Уж не знаю, что это было :).
Ищи в ~/.config/test/testApp.conf чего у тебя там было

Пожалста :)



Отредактировано (Ноя. 15, 2008 19:57:37)

Офлайн

#8 Ноя. 15, 2008 20:39:07

The gray Cardinal
От:
Зарегистрирован: 2007-03-07
Сообщения: 422
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4, путаница с QVariant

j2a
Ищи в ~/.config/test/testApp.conf чего у тебя там было
text=@Variant(\0\0\0\x7f\0\0\0\x1b\x62uiltin_function_or_method\0)

И это приводит к полной неработоспособности :). Т.е. даже очистка всех параметров не работает.



Офлайн

#9 Дек. 20, 2010 04:10:48

darktroll
От:
Зарегистрирован: 2010-03-16
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4, путаница с QVariant

Ребят, подскажите как с помощью QSettings сохранить состояние QCheckBox? 2 дня уже бьюсь….



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version