Я пишу с дистрибутивом Anaconda Python 2.7.7 и использую редактор PyCharm.
Я пытаюсь написать довольно простую программу с графическим интерфейсом, которая отображает изображение, имеет редактируемую текстовую область и кнопки Enter и Cancel. (Конечно, он должен делать больше, но я не думаю, что это имеет отношение к этой проблеме.)
Я думал, что у меня это работает, но потом оно... перестало? Я отредактировал его до минимума, который, по крайней мере для меня, все еще вызывает ошибку (хорошо, также код для его центрирования).
Для меня происходит следующее: когда я запускаю его сейчас, он печатает «привет», а затем «Процесс завершен с кодом выхода 139». Но если я запускаю его в Debug, он работает нормально, печатает «hi», затем «hi2» и отображает изображение (которое находится в той же папке, что и файл кода).
Я попытался найти Image.save, но все, что я нашел, было "Если по какой-то причине не удалось сохранить , метод вызовет исключение (обычно исключение IOError).", чего, похоже, не происходит.
Я пытался найти код выхода 139, но, похоже, не так уж много можно найти, за исключением того, что, я думаю, он соответствует SIGSEGV? Но я не знаю, как использовать это, чтобы помочь здесь.
Вот код; любые предложения приветствуются!
import sys
from PyQt4.QtGui import *
import Image
class APP(QApplication):
def __init__(self):
QApplication.__init__(self, sys.argv)
self.d = do_thing("image.jpg")
self.d.show()
class do_thing(QWidget):
def __init__(self, pm="image.jpg"):
QWidget.__init__(self)
self.layout = QVBoxLayout()
self.lab = QLabel()
im = Image.open(pm)
print "hi"
im.save("image.png")
print "hi2"
self.lab.setPixmap(QPixmap("image.png"))
self.layout.addWidget(self.lab)
self.setLayout(self.layout)
fg = self.frameGeometry()
center = QDesktopWidget().availableGeometry().center()
fg.moveCenter(center)
self.move(fg.topLeft())
if __name__ == "__main__":
myapp = APP()
sys.exit(myapp.exec_()
Обновление: я попытался распечатать текущий каталог; там нет ничего неожиданного. Там, где и должно быть, в той же папке, что и изображение. Я также пытался сохранить полный путь, но безрезультатно.
Я знаю, что IOError и segfault очень разные. Если бы это была IOError, у меня по крайней мере было бы что-то, с чем можно было бы работать, но я потерял 139. Странно то, что это работало какое-то время, и я не могу понять, почему оно остановилось или почему оно все еще работает в режиме отладки, а не в обычном режиме.
ОБНОВЛЕНИЕ: я попробовал исправление, предложенное здесь, но теперь, хотя он печатает оба оператора hi, окно исчезает, как только появляется, и я все еще получаю код выхода 139.
im
в порядке, кроме выполненияsave
? Например, вы можетеprint im.format,im.size, im.mode
. Кажется вполне возможным, что он уже в беспорядке после открытия, и сохранение вызывает segfault, но это не проблема. Также вы пробовали с некоторыми другими изображениями? - person strubbly   schedule 25.06.2015print im.format, im.size, im.mode
выдает ожидаемый результат JPEG (640, 480) RGB, который я пробовал с парой разных изображений. - person xan   schedule 25.06.2015from PyQt4.QtGui import *
) Но... нужен графический интерфейс. Любые предложения по альтернативе? Я только что открыл для себя Qt, но он мне очень нравится. - person xan   schedule 25.06.2015