Найти - Пользователи
Полная версия: pyQT4, путаница с QVariant
Начало » GUI » pyQT4, путаница с QVariant
1
The gray Cardinal
Есть такой пример:
#!/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.
Не понимаю, что я сделал здесь неправильно.
j2a
УМВР (по крайней мере, никакого трейсбека).

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)
j2a
Кстати, зачёт последним (AFAIR, The gray Cardinal и 124bit) вопрошающим по теме pyqt4, что указывают полноценный демо-код, сильно-сильно облегчают жизнь отвечающему.
The gray Cardinal
j2a
P.S. На будущее, не плохо бы показывать полный трейсбек
Это единственное сообщение (одна строка), я его и привёл.
Твои исправления не помогают (да собственно, они и несущественны), получаю всё то же “QVariant::load(QDataStream &s): type builtin_function_or_method unknown to QVariant.”.
Не прокатывает строка “self.settings.setValue('text', val)”.
The gray Cardinal
Сейчас заменил в конструкторе QSettings имя приложения (“testApp”) на чуть-чуть другое и вроде всё пошло.
Это значит, что я в процессе отладки просто умудрился записать в свой параметр “text” что-то шокирующее библиотеку :). Уж не знаю, что это было :).
The gray Cardinal
j2a
Спасибо за помощь :).
j2a
The gray Cardinal
Сейчас заменил в конструкторе QSettings имя приложения (“testApp”) на чуть-чуть другое и вроде всё пошло.
Это значит, что я в процессе отладки просто умудрился записать в свой параметр “text” что-то шокирующее библиотеку :). Уж не знаю, что это было :).
Ищи в ~/.config/test/testApp.conf чего у тебя там было

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

И это приводит к полной неработоспособности :). Т.е. даже очистка всех параметров не работает.
darktroll
Ребят, подскажите как с помощью QSettings сохранить состояние QCheckBox? 2 дня уже бьюсь….
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB