Найти - Пользователи
Полная версия: Проблема PyQt v4.6.1
Начало » GUI » Проблема PyQt v4.6.1
1
Moff
Пример модульного теста, работающий в 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
poltergeist
По моему, все правильно:
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()
Moff
poltergeist
Лучше иметь убиваемый QtGui.QApplication как в 4.6.1, чем не убиваемый в 4.6.0.
К сожалению я не нашел явного упоминания о таких радикальных изменениях в PyQt.
Проблема не в том что я не сумею переделать тест, проблема в том что непонятно, на что это изменение может повлиять.
Пока не могу локализовать ошибку падения всего приложения при работе с потоками Qthread (то же приложение на старом PyQt работает). Удалось локализовать пока только описанное выше изменение.
poltergeist
Лично мне новая логика QtGui.QApplication понятна и я знаю где можно словить проблемы с нею (в моих доктестах выше как раз тот пример).
А вот потоки по интересней будут, сочувствую и желаю успеха:) Напишите сюда о найденных багах, если не трудно…
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