我正在开发一个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的路径被解释为与左边不同的任何想法?
答案 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”;这样的字符串称为原始字符串并使用 解释反斜杠转义序列的不同规则。