【问题标题】:Path for Tkinter Image script doubles forward slashTkinter Image 脚本的路径加倍正斜杠
【发布时间】:2014-01-11 08:11:09
【问题描述】:

我正在开发一个 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()

这对我来说很奇怪。当我删除右箭头上的 cmets 以尝试包含左箭头和右箭头时,出现错误。错误是:

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

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

【问题讨论】:

    标签: python tkinter python-imaging-library


    【解决方案1】:

    您应该对 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”;这样的字符串称为原始字符串并使用 解释反斜杠转义序列的不同规则。

    【讨论】:

    • 谢谢奈杰尔!感谢您抽出宝贵时间帮助我。
    猜你喜欢
    • 2012-11-16
    • 2020-11-20
    • 2017-03-16
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2016-11-20
    • 2013-07-23
    • 1970-01-01
    相关资源
    最近更新 更多