Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 29, 2009 14:31:52

Moff
От:
Зарегистрирован: 2009-10-29
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема PyQt v4.6.1

Пример модульного теста, работающий в PyQt 4.6.0 и младших версиях:

# coding: utf-8

import unittest
from PyQt4 import QtGui

class TestForPyQt46x(unittest.TestCase):

def setUp(self):
app = QtGui.QApplication([])

def testSimple(self):
self.assertFalse(QtGui.QApplication.instance() is None)

if __name__ == '__main__':
unittest.main()
Данный тест перестал работать после перехода на Qt 4.5.3 и PyQt v4.6.1.

Подскажите, кто сталкивался с проблемами в новой версии PyQt? Такое ощущение, что QApplication перестал быть “одиночкой”.

З.Ы. Тесты выполнялись на ОС WinXP:
Python: 2.5.2
Qt: 4.4.0
sip: 4.7.6
PyQt: 4.4.2

Python: 2.5.4
Qt: 4.5.2
sip: 4.9
PyQt: 4.6

Python: 2.6.3
Qt: 4.5.2
sip: 4.9
PyQt: 4.6

Python: 3.1.1
Qt: 4.5.2
sip: 4.9
PyQt: 4.6


З.Ы.Ы. Тест НЕ выполнялся на следующих конфигурациях:
Python: 2.5.4
Qt: 4.5.3
sip: 4.9.1
PyQt: 4.6.1

Python: 2.5.4
Qt: 4.5.3
sip: 4.10-snapshot-20091026
PyQt: 4.7-snapshot-20091026

Python: 2.6.3
Qt: 4.5.3
sip: 4.9.1
PyQt: 4.6.1

Python: 3.1.1
Qt: 4.5.3
sip: 4.9.1
PyQt: 4.6.1



Офлайн

#2 Окт. 29, 2009 15:19:26

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема PyQt v4.6.1

По моему, все правильно:

test_460 = """
>>> from PyQt4 import QtGui
>>> QtGui.QApplication.instance()
>>> def main():
... app = QtGui.QApplication([])
... assert app is QtGui.QApplication.instance()
>>> main()
>>> QtGui.QApplication.instance() is None
False
"""

test_461 = """
>>> from PyQt4 import QtGui
>>> QtGui.QApplication.instance()
>>> def main():
... app = QtGui.QApplication([])
... assert app is QtGui.QApplication.instance()
>>> main()
>>> QtGui.QApplication.instance() is None
True
"""
Лучше иметь убиваемый QtGui.QApplication как в 4.6.1, чем не убиваемый в 4.6.0.

Ваш тест будет выглядеть так:
import unittest
from PyQt4 import QtGui

class TestForPyQt46x(unittest.TestCase):

def setUp(self):
self.app = QtGui.QApplication([])

def testSimple(self):
self.assertFalse(QtGui.QApplication.instance() is None)

if __name__ == '__main__':
unittest.main()



Офлайн

#3 Окт. 29, 2009 15:40:33

Moff
От:
Зарегистрирован: 2009-10-29
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема PyQt v4.6.1

poltergeist
Лучше иметь убиваемый QtGui.QApplication как в 4.6.1, чем не убиваемый в 4.6.0.
К сожалению я не нашел явного упоминания о таких радикальных изменениях в PyQt.
Проблема не в том что я не сумею переделать тест, проблема в том что непонятно, на что это изменение может повлиять.
Пока не могу локализовать ошибку падения всего приложения при работе с потоками Qthread (то же приложение на старом PyQt работает). Удалось локализовать пока только описанное выше изменение.



Офлайн

#4 Окт. 29, 2009 16:07:20

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема PyQt v4.6.1

Лично мне новая логика QtGui.QApplication понятна и я знаю где можно словить проблемы с нею (в моих доктестах выше как раз тот пример).
А вот потоки по интересней будут, сочувствую и желаю успеха:) Напишите сюда о найденных багах, если не трудно…



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version