Tkinter Image脚本的路径加倍正斜杠

时间:2014-01-11 08:11:10

标签: python tkinter python-imaging-library

我正在开发一个GUI来通过网络驱动无线机器人。我正在使用图片而不是箭头的标签文字。当我使用此代码时,我能够正确显示左箭头png图形:

from Tkinter import *
from PIL import Image, ImageTk

root = Tk()

leftImage = ImageTk.PhotoImage(Image.open("C:\Users\usr\Desktop\left.png"))


#rightImage = ImageTk.PhotoImage(Image.open("C:\Users\usr\Desktop\right.png"))

class GUI:

    def __init__(self, master):

        frame = Frame(master)
        frame.grid()


        left = Label(root, image = leftImage)
        left.grid(row=1, column=0)

        #right = Label(root, image = rightImage)
        #right.grid(row=1, column=2)


app = GUI(root)
root.mainloop()

这就是我对它感到奇怪的地方。当我删除右箭头上的注释以尝试包含左箭头和右箭头时,我收到错误。错误是:

IOError: [Errno 22] invalid mode ('rb') or filename: 'C:\\Users\\usr\\Desktop\right.png'

我似乎无法弄清楚为什么它会突然将“\”变为右箭头上的路径“\”。然而,它不会在左箭头的路径上画出错误。我很肯定两个文件都在正确的位置。关于为什么rightImage的路径被解释为与左边不同的任何想法?

1 个答案:

答案 0 :(得分:2)

您应该在Windows上使用原始字符串文字作为文件路径(在双引号之前注意r):

leftImage = ImageTk.PhotoImage(Image.open(r"C:\Users\usr\Desktop\left.png"))
rightImage = ImageTk.PhotoImage(Image.open(r"C:\Users\usr\Desktop\right.png"))

它对rightImage的工作方式不同,因为\r是一个特殊字符(是的,它是一个字符,而不是两个) - carriage return

引用一个伟大的人(和Python文档):

  

反斜杠(\)字符用于转义字符   否则具有特殊含义,例如换行符,反斜杠本身,   或引用字符。字符串文字可以选择加前缀   带有字母“r”或“R”;这样的字符串称为原始字符串并使用   解释反斜杠转义序列的不同规则。