【问题标题】:Tkinter and pillow operationsTkinter 和枕头操作
【发布时间】:2017-04-20 19:29:45
【问题描述】:

我需要一些帮助,

以下是在 Tkinter 中显示滑块的代码,

from Tkinter import *

def show_values():
    print (w1.get(), w2.get())

master = Tk()
w1 = Scale(master, from_=0, to=42)
w1.pack()
w2 = Scale(master, from_=0, to=200, orient=HORIZONTAL)
w2.pack()
Button(master, text='Show', command=show_values).pack()

mainloop()

下面是过滤代码

from PIL import ImageFilter
im2 = im.filter(ImageFilter.MinFilter(3))

我想动态显示图像过滤,这样当我们滚动滑块并且图像得到更新时,传递给 MinFilter() 的参数应该会发生变化。有人可以帮忙吗?

【问题讨论】:

  • Scale( ... , command=show_values)

标签: python-3.x image-processing tkinter pillow tkinter-canvas


【解决方案1】:

Scale 具有 command=,它使用来自刻度的当前值执行函数

import Tkinter as tk
from PIL import Image, ImageTk, ImageFilter


def show_value_1(value):
    print('v1:', value)

    # filter image
    img = image.filter(ImageFilter.MinFilter(int(value)))

    # create new photo
    photo = ImageTk.PhotoImage(img)

    # update image in label
    l['image'] = photo

    # PhotoImage has to be assigned to global variable - problem with "garbage collector"
    l.photo = photo


def show_value_2(value):
    print('v2:', value)


master = tk.Tk()

image = Image.open("ball-1.png")
photo = ImageTk.PhotoImage(image)

l = tk.Label(master, image=photo)
l.pack()
l.photo = photo

w1 = tk.Scale(master, from_=1, to=42, command=show_value_1)
w1.pack()

w2 = tk.Scale(master, from_=1, to=200, orient=tk.HORIZONTAL, command=show_value_2)
w2.pack()

master.mainloop()

ball-1.png

【讨论】:

  • 非常感谢。我看到 l = tk.Label() 和 l.photo = photo 是垃圾参考的额外副本。那是对的吗?我找到了effbot.org/tkinterbook/photoimage.htm我今晚会试试代码。
  • 是的,我这样做是因为垃圾收集器的问题,如 effbot.org 链接中所述。
猜你喜欢
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-18
  • 1970-01-01
  • 2019-01-22
  • 2019-02-22
相关资源
最近更新 更多