【问题标题】:Tkinter and PIL interfering with each other (Image.open) in PythonTkinter 和 PIL 在 Python 中相互干扰(Image.open)
【发布时间】:2021-05-06 13:00:36
【问题描述】:

请记住,我只是展示了一小部分代码。

如果不导入 Tkinter,下面的代码可以工作:

import os
import PIL
from PIL import ImageTk, Image
import cv2
import numpy as np
import pytesseract
import pandas as pd

##CROPS NUMBER PLATE
diretory_save_cut_out_NP = main_folder_directory + '/' + 'Computational directory/NP & VIN/Original NP/'

for x in range(0, file_count):
    im = Image.open(original_file_directory + reg_doc_list_names[0] + '.png')
    x1 = 140
    y1 = 740
    x2 = im.width - 1200
    y2 = im.height - 2470 
    region = im.crop((x1, y1, x2, y2))
    region.save(diretory_save_cut_out_NP + reg_doc_list_names[0] + '.png')
    reg_doc_list_names.pop(0)

但是,如果我导入 Tkinter 并尝试制作 GUI,则会弹出此错误:

import os
import PIL
from PIL import ImageTk, Image
import cv2
import numpy as np
import pytesseract
import pandas as pd
import tkinter as tk
from tkinter import *

    ##CROPS NUMBER PLATE
    diretory_save_cut_out_NP = main_folder_directory + '/' + 'Computational directory/NP & VIN/Original NP/'

    for x in range(0, file_count):
        im = Image.open(original_file_directory + reg_doc_list_names[0] + '.png')
        x1 = 140
        y1 = 740
        x2 = im.width - 1200
        y2 = im.height - 2470 
        region = im.crop((x1, y1, x2, y2))
        region.save(diretory_save_cut_out_NP + reg_doc_list_names[0] + '.png')
        reg_doc_list_names.pop(0)

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\lol\Anaconda3\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "<ipython-input-11-a57cb1712307>", line 35, in scanner
    im = Image.open(original_file_directory + reg_doc_list_names[0] + '.png')
AttributeError: type object 'Image' has no attribute 'open'

我尝试了一些东西,但是没有任何效果,你们有什么建议吗?提前致谢,我会尽快回复。

【问题讨论】:

  • 由于from tkinter import *,您使用的是tkinter.Image(),而不是PIL.Image()
  • @acw1668 伙计,你很棒,现在可以使用了,谢谢
  • * 导入并不总是邪恶的,但它们被滥用了很多。如果你真的需要很多 tk 的东西,import tkinter as tk 会更好,因为它不会因为潜在的冲突而污染你的命名空间。

标签: python-3.x image tkinter


【解决方案1】:

代码有效,感谢@acw1668:

##CROPS NUMBER PLATE
diretory_save_cut_out_NP = main_folder_directory + '/' + 'Computational directory/NP & VIN/Original NP/'

for x in range(0, file_count):
    im = PIL.Image.open(original_file_directory + reg_doc_list_names[0] + '.png')
    x1 = 140
    y1 = 740
    x2 = im.width - 1200
    y2 = im.height - 2470 
    region = im.crop((x1, y1, x2, y2))
    region.save(diretory_save_cut_out_NP + reg_doc_list_names[0] + '.png')
    reg_doc_list_names.pop(0)

【讨论】:

  • 顺便说一句,这是在导入时不使用* 的原因,除非确定,否则只需导入您需要的内容,例如from tkinter import Tk, Label, Button 等等
猜你喜欢
  • 1970-01-01
  • 2023-01-31
  • 2011-07-14
  • 2013-05-27
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
相关资源
最近更新 更多