python错误“;“未知选项”;“1”节:必须是“移动到”或“滚动”;特金特帆布

python错误“;“未知选项”;“1”节:必须是“移动到”或“滚动”;特金特帆布,python,canvas,tkinter,scrollbar,tkinter-canvas,Python,Canvas,Tkinter,Scrollbar,Tkinter Canvas,我正在尝试使用tkinter创建一个图像查看程序,除了:我想在用户选择的目录中有一个所有图像的列表,该列表应该显示在画布上,并附加一个水平滚动条,我在这个页面上看到其他人也有类似的问题,有人说使用一个框架,这是可行的,但当我想使用滚动条时,我得到以下错误: Exception in Tkinter callback Traceback (most recent call last): File "/usr/lib/python3.4/tkinter/__in

我正在尝试使用tkinter创建一个图像查看程序,除了:我想在用户选择的目录中有一个所有图像的列表,该列表应该显示在画布上,并附加一个水平滚动条,我在这个页面上看到其他人也有类似的问题,有人说使用一个框架,这是可行的,但当我想使用滚动条时,我得到以下错误:

    Exception in Tkinter callback
    Traceback (most recent call last):
      File "/usr/lib/python3.4/tkinter/__init__.py", line 1536, in/  
        __call__
        return self.func(*args)
      File "/usr/lib/python3.4/tkinter/__init__.py", line 1549, in xview
        res = self.tk.call(self._w, 'xview', *args)
    _tkinter.TclError: unknown option "1": must be moveto or scroll
    >>> 
我无法理解这一点,因此,请提供任何帮助,谢谢,以下是实际代码:

    from tkinter import *
    from PIL import Image,ImageTk
    import os
    import time

    #next image
    def Next():
        i += 1
        global img,i
        print(i)

        display_images(data[i])
        

    #previous image
    def Previous():
        i -= 1
        global img,i
        print(i)

        display_images(data[i])
    #list of images on canvas
    def show_images():
        global photoButtons,imgFile,imOpen,imgFoto,resized,photolist
        j = 0
        for number in data:
            print(">>>",number)
            imOpen.append(Image.open(data[j]))
            imgFile.append(imOpen[j])
            resized.append(imgFile[j].resize((50,50),Image.ANTIALIAS))
            imgFoto.append(ImageTk.PhotoImage(resized[j]))
            photoButtons.append(Button(photolist, text=j,/
            image=imgFoto[j],command=display_images(data[j]),width=50,/
            height = 50))
            photoButtons[j].pack(side=RIGHT)
            j += 1    

    #display selected image
    def display_images(image_name):
        img = Image.open(image_name)
        size = img.resize((700,500),Image.ANTIALIAS)
        photoviewer.image = ImageTk.PhotoImage(size)
        photoviewer.create_image(0,0, image=photoviewer.image,anchor='nw')

    # END DEF's

    global i

    i=0
    #root
    root = Tk()

    #root size
    root.geometry("1000x720+0+0")
    #canvas for displaying image
    photoviewer = Canvas(root, width=700, height=500)
    photoviewer.grid(row = 0, column = 0)
    photoviewer.place(x=295, y=215,)
    #frame (ive got this from another page of stack overflow)
    frame=Frame(root,width=300,height=300)
    frame.grid(row=0,column=0)
    #canvas for displaying list of images
    photolist = Canvas(frame, width=395, height=50)
    #scrollbar
    scrl=Scrollbar(frame,orient=HORIZONTAL)
    scrl.pack(side=BOTTOM,fill=X)
    scrl.config(command=photolist.xview)
    photolist.pack(side=TOP)

    imgFile = []
    imOpen=[]
    imgFoto=[]
    resized = []
    #get the directory with the images from the user
    data = os.listdir()
    print(data)
    cd = input("change directory to:   ")

    while cd != "x":
        
       
        os.chdir(cd)
        data = os.listdir()
        print(data)
        cd = input("change directory to:   ")

    #end

    #creating button for next image
    nxt=Button(root,text=">",command= Next)
    #creating button for previous image
    prvs=Button(root,text="<",command= Previous)
    photoButtons = []
    show_images()

    root.mainloop()
从tkinter导入*
从PIL导入图像,ImageTk
导入操作系统
导入时间
#下一张图片
def Next():
i+=1
全球img,i
印刷品(一)
显示图像(数据[i])
#以前的图像
def Previous():
i-=1
全球img,i
印刷品(一)
显示图像(数据[i])
#画布上的图像列表
def show_images():
全局照片按钮、imgFile、imOpen、imgFoto、调整大小、照片列表
j=0
对于数据中的数字:
打印(“>>”,编号)
imOpen.append(Image.open(data[j]))
append(imOpen[j])
resized.append(imgFile[j].resize((50,50),Image.ANTIALIAS))
imgFoto.append(ImageTk.PhotoImage(调整大小[j]))
photoButtons.append(按钮)(照片列表,文本=j/
图像=imgFoto[j],命令=display_图像(数据[j]),宽度=50/
高度=50)
照片按钮[j]。包装(侧面=右侧)
j+=1
#显示所选图像
def显示图像(图像名称):
img=Image.open(图像名称)
size=img.resize((700500),Image.ANTIALIAS)
photoviewer.image=ImageTk.PhotoImage(大小)
photoviewer.create_image(0,0,image=photoviewer.image,anchor='nw')
#结束DEF的
全球i
i=0
#根
root=Tk()
#根大小
根几何(“1000x720+0+0”)
#用于显示图像的画布
photoviewer=画布(根,宽度=700,高度=500)
photoviewer.grid(行=0,列=0)
photoviewer.place(x=295,y=215,)
#框架(我从另一页的堆栈溢出中得到)
框架=框架(根,宽度=300,高度=300)
frame.grid(行=0,列=0)
#用于显示图像列表的画布
照片列表=画布(边框,宽度=395,高度=50)
#滚动条
scrl=滚动条(框架,方向=水平)
螺旋包装(侧面=底部,填充=X)
scrl.config(命令=photolist.xview)
照片列表包(侧面=顶部)
imgFile=[]
iOpen=[]
imgFoto=[]
调整大小=[]
#从用户处获取包含图像的目录
data=os.listdir()
打印(数据)
cd=输入(“将目录更改为:”)
而cd!=“x”:
os.chdir(光盘)
data=os.listdir()
打印(数据)
cd=输入(“将目录更改为:”)
#结束
#为下一个图像创建按钮
nxt=按钮(根,text=“>”,命令=下一步)
#为上一个图像创建按钮

prvs=按钮(root,text=“要将滚动条连接到小部件,您必须做两件事:告诉小部件要与哪个滚动条交互(通过
xscrollcommand
和/或
yscrollcommand
),并告诉滚动条要滚动哪个小部件(使用
command
属性)。您忽略了第一部分

创建滚动条后,在某处添加以下内容:

photolist.configure(xscrollcommand=scrl.set)

注意:如果您只想滚动一些图像,则无需在画布中嵌入框架。您可以直接在画布上创建图像。框架的优点是您可以使用
pack
,因此无需计算图像放置位置的坐标,但它会增加很多复杂性y、 由于您将图像并排放置,因此很容易计算每个图像的x/y坐标。

也许您需要
photolist.config(xscrollcommand=scrl.set)
。我发现的一些示例中至少有这样的行。您的代码有语法错误(以
/
结尾的行)当一行太长时,就换一行谢谢,你的回答做到了,很抱歉花了这么长时间才重播,我的电脑坏了:-(@Cid EL:the
/
是非法语法。正确的字符是``哦,对不起,布莱恩,我的错误,我记得很清楚;-P