如何使用Tkinter在Python上传图像?

时间:2017-03-04 20:02:56

标签: python user-interface tkinter widget

我在Python上使用Tkinter进行GUI编程。我正在使用网格管理器来制作小部件。我创建了几个按钮,我想在它们上面上传图像。当我输入此代码时,它会给我一个escape sequence error

我听说使用PIL不是个好主意?这是真的吗?

cookImage = PhotoImage(file = "image/C:\Users\terimaa\AppData\Local\Programs\Python\Python36-32\cook.gif")

4 个答案:

答案 0 :(得分:0)

Windows文件名必须以原始字符串形式输入:

{{1}}

这适用于所有Python,而不仅仅是PIL。

答案 1 :(得分:0)

使用:

path = r"a string with the path of the photo" 

请注意r前缀,表示原始字符串。

...
img = ImageTk.PhotoImage(Image.open(file=path))
label = tk.Label(root, image = img)
label.something() #pack/grid/place
...

路径可以是:

  • 绝对("C:\Users\terimaa\AppData\Local\Programs\Python\Python36-32\cook.gif"

  • 相对("\cook.gif",取决于Python代码的位置)

答案 2 :(得分:0)

如果您的image file正是您想要的,只需使用BitmapImagePhotoImage打开即可。请注意,Windows上应该具有3.6的Tcl / Tk 8.6也会读取.png文件。在Windows上,文件名前缀为'r'或使用正斜杠:'C:/ User /.....

不再维护实际的PIL包,仅适用于2.x.这是新用户不应该使用的。兼容的后继者pillow(例如与python -m pip install pillow一起安装)被主动维护并与3.x一起使用。兼容性扩展到import语句:import PIL导入枕头。 Pillows允许人们操纵图像并将许多格式转换为tk格式(ImageTk类)。

答案 3 :(得分:0)

这是精确的代码,对移动图像最有帮助

from tkinter import *
from tkinter import ttk
from tkinter import filedialog
import os, shutil

class Root(Tk):
    def __init__(self):
        super(Root,self).__init__()
        self.title("thinter Dialog Widget")
        self.minsize(640,400)

        self.labelFrame = ttk.LabelFrame(self,text="Open A File")
        self.labelFrame.grid(column=0,row=1,padx= 20, pady= 20)
        self.btton()

    def btton(self):
        self.button = ttk.Button(self.labelFrame, text="Browse Afile", command=self.fileDailog)
        self.button.grid(column=1,row=1)
    def fileDailog(self):
        self.fileName = filedialog.askopenfilename(initialdir = "/", title="Select A File",filetype=(("jpeg","*.jpg"),("png","*.png")))
        self.label = ttk.Label(self.labelFrame, text="")
        self.label.grid(column =1,row = 2)
        self.label.configure(text = self.fileName)
        os.chdir('e:\\')
        os.system('mkdir BACKUP')
        shutil.move(self.fileName,'e:\\')



if __name__ == '__main__':
    root = Root()
    root.mainloop()

由于权限被拒绝,您无法将图像移动到C驱动器:此代码在python 3.8,3,7上成功工作