Найти - Пользователи
Полная версия: ImportError: No module named * + Qwt
Начало » GUI » ImportError: No module named * + Qwt
1
anber
Всем привет!
Создаю под Windows в Qt Designer форму, кидаю на нее qwtPlot, генерирую при помощи pyuic4 *.py файл - все работает.
Создаю под Linux в Qt Designer форму, кидаю на нее qwtPlot, генерирую при помощи pyuic4 *.py файл - при запуске выдает ошибку:
from qwt_plot import QwtPlot
ImportError: No module named qwt_plot

Запускаю под Linux файл сгенерированный в Windows - все работает!

Сравниваю код строки в которой ошибка:

Linux:
self.qwtPlot = QwtPlot(self.centralwidget)
...
from qwt_plot import QwtPlot
Windows:
self.qwtPlot = Qwt5.QwtPlot(self.centralwidget)
...
from PyQt4 import Qwt5
Подскажите, почему так происходит, и как сделать чтобы работало?
guranvir
А версии QT в офтопике т лине одинаковые?
anber
Под линем Qt 4.6.2, Qwt 5.2.1, pyqt4-dev-tools 4.7.2, python-qt4 4.7.2, Python 2.6.
По офтопиком PyQt-4.5.4-1, Qwt 5.2.0, Python 2.6.
anber
Если Qwt не использовать то все прекрасно.

Нашел такие статью:
http://code.google.com/p/phduino/source/browse/wiki/pYpHpoTManual.wiki
http://www.riverbankcomputing.com/pipermail/pyqt/2006-August/013960.html

На сколько я понял там рекомендуют просто заменить в сгенерированном pyuic4 файле
from qwt_plot import QwtPlot
на
from PyQt4.Qwt5 import QwtPlot

Да, это помогает. Но появляются проблемы если подключать *.ui формы динамически:
Под линем:
Traceback (most recent call last):
File "/home/tax/tmp/python/wiki_ex_utf_2/test.pyw", line 19, in <module>
sys.exit(main())
File "/home/tax/tmp/python/wiki_ex_utf_2/test.pyw", line 12, in main
form = mainform.TMainForm() # &#241;&#238;&#231;&#228;&#224;&#65464;&#242; &#238;&#225;&#250;&#229;&#234;&#242; &#244;&#238;&#240;&#236;&#251;
File "/home/tax/tmp/python/wiki_ex_utf_2/mainform.py", line 13, in __init__
uic.loadUi("mainform.ui", self)
File "/usr/lib/pymodules/python2.6/PyQt4/uic/__init__.py", line 177, in loadUi
return DynamicUILoader().loadUi(uifile, baseinstance)
File "/usr/lib/pymodules/python2.6/PyQt4/uic/Loader/loader.py", line 21, in loadUi
return self.parse(filename)
File "/usr/lib/pymodules/python2.6/PyQt4/uic/uiparser.py", line 813, in parse
actor(elem)
File "/usr/lib/pymodules/python2.6/PyQt4/uic/uiparser.py", line 661, in createUserInterface
self.traverseWidgetTree(elem)
File "/usr/lib/pymodules/python2.6/PyQt4/uic/uiparser.py", line 639, in traverseWidgetTree
handler(self, child)
File "/usr/lib/pymodules/python2.6/PyQt4/uic/uiparser.py", line 163, in createWidget
self.stack.push(self.setupObject(widgetClass(elem), parent, elem))
File "/usr/lib/pymodules/python2.6/PyQt4/uic/uiparser.py", line 135, in setupObject
obj = self.factory.createQObject(clsname, name, args, is_attribute)
File "/usr/lib/pymodules/python2.6/PyQt4/uic/objcreator.py", line 65, in createQObject
classType = self.findQObjectType(classname)
File "/usr/lib/pymodules/python2.6/PyQt4/uic/objcreator.py", line 75, in findQObjectType
w = module.search(classname)
File "/usr/lib/pymodules/python2.6/PyQt4/uic/Loader/qobjectcreator.py", line 52, in search
self._modules[module] = __import__(module, {}, {}, (cls,))
ImportError: No module named qwt_plot
Под офтопиком:
Traceback (most recent call last):
File "C:\home\Python\wiki_ex_utf_2\test.pyw", line 19, in <module>
sys.exit(main())
File "C:\home\Python\wiki_ex_utf_2\test.pyw", line 12, in main
form = mainform.TMainForm() # создаёт объект формы
File "C:\home\Python\wiki_ex_utf_2\mainform.py", line 13, in __init__
uic.loadUi("mainform.ui", self)
File "C:\soft\Python26\lib\site-packages\PyQt4\uic\__init__.py", line 112, in loadUi
return DynamicUILoader().loadUi(uifile, baseinstance)
File "C:\soft\Python26\lib\site-packages\PyQt4\uic\Loader\loader.py", line 21, in loadUi
return self.parse(filename)
File "C:\soft\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 768, in parse
actor(elem)
File "C:\soft\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 616, in createUserInterface
self.traverseWidgetTree(elem)
File "C:\soft\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 594, in traverseWidgetTree
handler(self, child)
File "C:\soft\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 162, in createWidget
self.stack.push(self.setupObject(widgetClass(elem), parent, elem))
File "C:\soft\Python26\lib\site-packages\PyQt4\uic\uiparser.py", line 134, in setupObject
obj = self.factory.createQObject(clsname, name, args, is_attribute)
File "C:\soft\Python26\lib\site-packages\PyQt4\uic\objcreator.py", line 57, in createQObject
classType = self.findQObjectType(classname)
File "C:\soft\Python26\lib\site-packages\PyQt4\uic\objcreator.py", line 67, in findQObjectType
w = module.search(classname)
File "C:\soft\Python26\lib\site-packages\PyQt4\uic\Loader\qobjectcreator.py", line 24, in search
self._module = __import__(self._moduleName, {}, {}, self._classes)
TypeError: 'set' object does not support indexing
Пробовал в *.ui фале заменить
<header>qwt_plot.h</header>
на
<header>PyQt4.Qwt5.h</header>
но это помогает только под линем и до первого изменения формы.
anber
А вот и решение: http://comments.gmane.org/gmane.comp.python.xy.devel/420
Here is a temporally solution of the problem.
Consider that Python26 is installed on the disk C:\ you have to change
the line 19 in the file
C:\Python26\Lib\site-packages\PyQt4\uic\Loader\qobjectcreator.py :

self._classes = set(classes)

by

self._classes = classes

In fact, the ‘set’ method does not properly work with Python2.6 (see the
error in previous mail).
I don't know exactly the real impact of this change, but it works for me
(on Vista family and XP pro).
Если б еще кто-нить обьяснил что при всем том происходит, было бы замечательно…
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