【问题标题】:Import Image into tkinter将图像导入 tkinter
【发布时间】:2013-07-17 20:03:40
【问题描述】:

好的,所以我目前正在编写一个简单的图像查看器,并且我有足够的代码来查看这些图像,但唯一的问题是查看您想要的图像。您必须将它们放在与脚本相同的目录中并重命名它们。我希望用户能够单击文件打开之类的内容,然后导入这些图像。我目前使用 Tkinter 作为我的 Gui 和 PIL 来显示图像。这是我最新的代码:

from PIL import Image, ImageTk
from Tkinter import Tk, Label, BOTH
from ttk import Frame, Style
import os
import PIL
import Tkinter 

filename = "test.jpg"
filename2 = "test1.jpg"
filename3 = "test2.jpg"
filename4 = "test3.jpg"
basewidth = 300
img = Image.open(filename)
wpercent = (basewidth / float(img.size[0]))
hsize = int((float(img.size[1]) * float(wpercent)))
img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS)
img.save('resize.jpg')

basewidth = 300
img = Image.open(filename2)
wpercent = (basewidth / float(img.size[0]))
hsize = int((float(img.size[1]) * float(wpercent)))
img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS)
img.save('resize2.jpg')

basewidth = 300
img = Image.open(filename4)
wpercent = (basewidth / float(img.size[0]))
hsize = int((float(img.size[1]) * float(wpercent)))
img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS)
img.save('resize4.jpg')
class Example(Frame):



    def __init__(self, parent):
            Frame.__init__(self, parent)   

            self.parent = parent

            self.initUI()

    def initUI(self):

            self.parent.title("Picture")
            self.pack(fill=BOTH, expand=1)

            Style().configure("TFrame", background="")

            image1 = Image.open("resize.jpg")
            bardejov = ImageTk.PhotoImage(image1)
            label1 = Label(self, image=bardejov)
            label1.image = bardejov
            label1.place(x=5, y=5)

            image2 = Image.open("resize2.jpg")
            bardejov = ImageTk.PhotoImage(image2)
            label1 = Label(self, image=bardejov)
            label1.image = bardejov
            label1.place(x=5, y=250)

            image3 = Image.open("resize3.jpg")
            bardejov = ImageTk.PhotoImage(image3)
            label1 = Label(self, image=bardejov)
            label1.image = bardejov
            label1.place(x= 350, y=5)

            image3 = Image.open("resize4.jpg")
            bardejov = ImageTk.PhotoImage(image3)
            label1 = Label(self, image=bardejov)
            label1.image = bardejov
            label1.place(x= 350, y=250)

def main():

     root = Tk()
     root.geometry("660x488")
     app = Example(root)
     root.mainloop()  

if __name__ == '__main__':
     main()  

【问题讨论】:

  • 你对这个问题有什么不明白的地方?你知道 Tkinter 有内置的文件对话框吗?或者,您知道它但不知道如何使用它?或者还有什么你不明白的地方?
  • 我知道 tkinter 有一个内置的文件对话框,我花了一整天的时间试图解决它,但我最终走到了死胡同并发布在这里我需要有人告诉我如何添加一个文件对话框定义所有 img = 此处打开文件对话框的内容。然后我就是不知道如何打开它。

标签: python tkinter


【解决方案1】:

给你 - 我为一张图片做,你为所有其他人做同样的事情

import tkFileDialog
from Tkinter import *
from PIL import Image
import os

root= Tk()

def resizeIt():
    filename = tkFileDialog.askopenfilename()
    basewidth = 300
    img = Image.open(filename)
    wpercent = (basewidth / float(img.size[0]))
    hsize = int((float(img.size[1]) * float(wpercent)))
    img = img.resize((basewidth, hsize), Image.ANTIALIAS)
    img.save('resize.jpg')
    os.remove(filename) # deletes the original image after you have got the resized image


Button(text='add image', command=resizeIt).pack()

root.mainloop()

在您的问题后在评论中编辑

是的,您可以使用os 模块删除文件。首先在当前命名空间中import os,然后在保存调整大小的图像后,添加一行os.remove(filename)。 我已经在上面的代码中做到了。

【讨论】:

  • 在您选择四个图像后发生了一些奇怪的事情,您必须单击 x 打开它我如何添加文本来告诉用户这样做,或者您是否有修复方法谢谢
  • 您只能在一个对话框中选择一张图片。从文件对话框中选择一个图像,然后单击“打开”。而已。您将在保存此 python 脚本的同一位置获得名称为 resize.jpg 的图像
  • 我是否必须按四次,因为我已经重复了四次,但都在 def rezimg 下,然后按一次按钮(ect)
  • 取决于你想做什么。如果您有 4 个按钮,请为每个方法添加 4 个新命令,例如 resizeIt1 到 resizeIt4,并且还要小​​心以不同的名称保存每个命令。最重要的是阅读一些关于 python 和/或 tkinter 的书
  • 我在学习tkiner的过程中经历了学习python的艰辛
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 2020-06-25
  • 2018-06-21
  • 1970-01-01
  • 2022-06-25
  • 2014-08-17
相关资源
最近更新 更多