Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pythonpil和tkinter;使图像变亮并显示它_Python_Python 2.7_Tkinter_Python Imaging Library - Fatal编程技术网

pythonpil和tkinter;使图像变亮并显示它

pythonpil和tkinter;使图像变亮并显示它,python,python-2.7,tkinter,python-imaging-library,Python,Python 2.7,Tkinter,Python Imaging Library,我想做的是打开一个有两个图像的窗口,一个图像是另一个图像的精确副本。然后,当我点击一个按钮时,它会改变右边的图像。我希望这是有意义的。我没有的代码是: from __future__ import division from Tkinter import * from PIL import Image, ImageTk, ImageFilter import random class MyApp(object): def __init__(self): self.roo

我想做的是打开一个有两个图像的窗口,一个图像是另一个图像的精确副本。然后,当我点击一个按钮时,它会改变右边的图像。我希望这是有意义的。我没有的代码是:

from __future__ import division
from Tkinter import *
from PIL import Image, ImageTk, ImageFilter
import random

class MyApp(object):
    def __init__(self):
        self.root = Tk()
        self.root.wm_title("Image examples")

        img = Image.open("lineage.jpg").convert("RGB")
        (w, h) = (img.size[0], img.size[1])
        print (w, h)

        tkpi = ImageTk.PhotoImage(img)
        label = Label(self.root, image=tkpi)
        label.grid(row=0, column=0, padx=5, pady=5, rowspan=10)

        img2 = img.copy()
        pixels = img2.load()

        tkpi2 = ImageTk.PhotoImage(img2)
        label = Label(self.root, image=tkpi2)
        label.grid(row=0, column=1, padx=5, pady=5, rowspan=10)

        Button(self.root, text="Brighten", command=self.brighten).grid(row=0, column= 2)  
        self.root.mainloop()

    def brighten(self):
        self.pixels = self.pixels.point(lambda x: x*1.9)          
MyApp()
我尝试的是在单击“亮起”按钮时更新img2。当我现在尝试时,会出现以下错误:

File "C:\Users\Admin\Desktop\imageeditor.py", line 36, in brighten
self.pixels = self.pixels.point(lambda x: x*1.9)
AttributeError: 'MyApp' object has no attribute 'pixels'

正如你所知道的,我是编程新手,所以任何能让我走上正轨的帮助都会很棒

下面是一个完整的解决方案。以下是对所做更改的一些评论:

以前uuu init_uuuu方法从未返回,因为它在最后调用self.root.mainloop。这可能会导致一些问题。我对其进行了重组,使其更像python文档中的hello world示例。 这里有一个很好的例子,这就是光亮方法的模型。 有一个from Tkinter import*,由from Tkinter import Frame、Tk、Label、Button替换。事实证明,PIL和Tkinter都有一个名为Image的属性,这让人很困惑。尝试并避免使用from module import*,而是在导入内容中显式使用,这将防止名称空间冲突。 代码


下面是一个完整的解决方案。以下是对所做更改的一些评论:

以前uuu init_uuuu方法从未返回,因为它在最后调用self.root.mainloop。这可能会导致一些问题。我对其进行了重组,使其更像python文档中的hello world示例。 这里有一个很好的例子,这就是光亮方法的模型。 有一个from Tkinter import*,由from Tkinter import Frame、Tk、Label、Button替换。事实证明,PIL和Tkinter都有一个名为Image的属性,这让人很困惑。尝试并避免使用from module import*,而是在导入内容中显式使用,这将防止名称空间冲突。 代码

我有一个有效的

from __future__ import division
from Tkinter import *
from PIL import Image, ImageTk, ImageFilter
import random

class MyApp(object):
    def __init__(self):
        self.root = Tk()
        self.root.wm_title("Image examples")

        img = Image.open("lineage.jpg").convert("RGB")
        (self.w, self.h) = (img.size[0], img.size[1])

        self.tkpi = ImageTk.PhotoImage(img)
        self.label = Label(self.root, image=self.tkpi)
        self.label.grid(row=0, column=0, padx=5, pady=5, rowspan=10)

        self.img2 = img.copy()
        self.pixels = self.img2.load()
        self.width, self.height = self.img2.size



        self.tkpi2 = ImageTk.PhotoImage(self.img2)
        self.label2 = Label(self.root, image=self.tkpi2)
        self.label2.grid(row=0, column=1, padx=5, pady=5, rowspan=10)

        self.btn = Button(self.root, text="Brighten")
        self.btn.grid(row=0, column= 2)
        self.btn.bind('<Button-1>', self.brighten)
        self.root.mainloop()

    def brighten(self,*args):
#        self.pixels = self.pixels.point(lambda x: x*1.9)
        for i in range(self.w):    # for every pixel:
            for j in range(self.h):
#                print self.pixels[i,j]
                self.pixels[i,j] = (int(self.pixels[i,j][0] * 1.9),
                                    int(self.pixels[i,j][1] * 1.9),
                                    int(self.pixels[i,j][2] * 1.9))
        self.tkpi2 = ImageTk.PhotoImage(self.img2)
        self.label2.configure(image = self.tkpi2)
        self.root.update_idletasks()
MyApp()
我有一个有效的

from __future__ import division
from Tkinter import *
from PIL import Image, ImageTk, ImageFilter
import random

class MyApp(object):
    def __init__(self):
        self.root = Tk()
        self.root.wm_title("Image examples")

        img = Image.open("lineage.jpg").convert("RGB")
        (self.w, self.h) = (img.size[0], img.size[1])

        self.tkpi = ImageTk.PhotoImage(img)
        self.label = Label(self.root, image=self.tkpi)
        self.label.grid(row=0, column=0, padx=5, pady=5, rowspan=10)

        self.img2 = img.copy()
        self.pixels = self.img2.load()
        self.width, self.height = self.img2.size



        self.tkpi2 = ImageTk.PhotoImage(self.img2)
        self.label2 = Label(self.root, image=self.tkpi2)
        self.label2.grid(row=0, column=1, padx=5, pady=5, rowspan=10)

        self.btn = Button(self.root, text="Brighten")
        self.btn.grid(row=0, column= 2)
        self.btn.bind('<Button-1>', self.brighten)
        self.root.mainloop()

    def brighten(self,*args):
#        self.pixels = self.pixels.point(lambda x: x*1.9)
        for i in range(self.w):    # for every pixel:
            for j in range(self.h):
#                print self.pixels[i,j]
                self.pixels[i,j] = (int(self.pixels[i,j][0] * 1.9),
                                    int(self.pixels[i,j][1] * 1.9),
                                    int(self.pixels[i,j][2] * 1.9))
        self.tkpi2 = ImageTk.PhotoImage(self.img2)
        self.label2.configure(image = self.tkpi2)
        self.root.update_idletasks()
MyApp()

似乎修复了该错误,但返回了“文件C:\Users\Admin\Desktop\imageeditor.py,第32行,在brighlight self.pixels=self.pixels.pointlambda x:x*1.9 AttributeError:“PixelAccess”对象没有属性“point”是的,我尝试过,得到了相同的错误。我现在正在努力解决这个问题谢谢你的努力,如果你有解决办法,请告诉我。谢谢!你的代码比我的代码更干净、更容易理解。似乎修复了这个错误,但给了我这个“文件C:\Users\Admin\Desktop\imageeditor.py,第32行,在brighlight self.pixels=self.pixels.pointlambda x:x*1.9 AttributeError:“PixelAccess”对象没有属性“point”是的,我试过了,得到了同样的错误。我现在正在努力解决这个问题谢谢你的努力,如果你有解决办法,请告诉我。谢谢!你的代码比我的代码更干净、更容易理解。