python错误“;“未知选项”;“1”节:必须是“移动到”或“滚动”;特金特帆布
我正在尝试使用tkinter创建一个图像查看程序,除了:我想在用户选择的目录中有一个所有图像的列表,该列表应该显示在画布上,并附加一个水平滚动条,我在这个页面上看到其他人也有类似的问题,有人说使用一个框架,这是可行的,但当我想使用滚动条时,我得到以下错误: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
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