В настоящее время я работаю над приложением, которое считывает интенсивности из файлов .txt, а затем преобразует интенсивности в RGB, прежде чем отобразить их изображение.Сейчас я делаю это, создавая пустой объект tkinter.PhotoImage и затем заполняя пиксели данными RGB.До этого момента все работало нормально, но когда я пытаюсь использовать функцию PhotoImage.zoom () для масштабирования изображения, чтобы оно соответствовало моему холсту, я получаю:
>>>resizedImage = image.zoom(30)
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
rIm = im.zoom(30)
File "C:\Python32\lib\tkinter\__init__.py", line 3249, in zoom
self.tk.call(destImage, 'copy', self.name, '-zoom',x,y)
_tkinter.TclError: invalid command name "pyimage4"
Исходное изображение будет отлично рисоваться.Единственный раз, когда я получаю ошибку, это когда я пытаюсь увеличить.Я просмотрел документацию и файлы tkinter и нигде не могу найти эту ошибку.
Функция, которая создает исходное изображение, следующая:
def drawImage(filename, xPoints, yPoints, measurement, max, min):
xPosition = xPoints
yPosition = yPoints
im = PhotoImage(width = xPoints, height = yPoints)
for i in range(1, xPoints * yPoints + 1):
tmp = linecache.getline(filename +'_raw_' + str(i) + '.txt', measurement)
if eval(tmp[0:5]) < 100:
wavelength = eval(tmp[0:5])
intensity = eval(tmp[9:])
elif eval(tmp[0:5]) >= 100 and eval(tmp[0:5]) < 1000:
wavelength = eval(tmp[0:6])
intensity = eval(tmp[10:])
elif eval(tmp[0:5]) >= 1000:
wavelength = eval(tmp[0:7])
intensity = eval(tmp[11:])
RGB = wav2RGB(wavadjust(intensity, max, min))
im.put(RGB, (xPosition -1, yPosition - 1))
xPosition -= 1
if xPosition == 0:
xPosition = xPoints
yPosition -= 1
return im
wavadjust принимаетизмерение, наряду с минимальными и максимальными измерениями (читайте в другом месте) и распространяет измерения, чтобы дать более широкий диапазон цветов при преобразовании в RGB.wav2RGB берет настроенное измерение, преобразует его в RGB и возвращает кортеж.
Таким образом, фактическое создание изображения выглядит следующим образом:
image = drawImage(filename, xPoints, yPoints, initMeasurement, max, min)
resizedImage = image.zoom(30)