Ich versuche, ein Bildanzeigeprogramm mit tkinter zu erstellen, alles funktioniert gut, außer: Ich möchte eine Liste aller Bilder im Verzeichnis haben Der Benutzer wählte, diese Liste sollte auf einer Leinwand, mit einer horizontalen Bildlaufleiste daran angebracht werden, ich sah andere Leute auf dieser Seite hatte irgendwie das gleiche Problem und jemand sagte, um einen Rahmen zu verwenden, das funktioniert, aber wenn ich will die Scrollbar, ich die folgende Fehlermeldung erhalten:Python-Fehler "unbekannte Option" 1 ": muss move to oder scroll" tkinter canvas
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
>>>
i aus, dass macht Kopf oder Schwanz kann nicht, also bitte, jede mögliche Hilfe apreciated, hier ist der eigentliche Code:
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()
die Idee ist, dass der Benutzer ein Verzeichnis wählen sollte, nachdem er 'x' gedrückt hat, sollte das Programm show_images aufrufen, die alle Bilder in diesem Verzeichnis auf einer Zeichenfläche mit einer Bildlaufleiste anzeigen sollte, sollte der Benutzer dann in der Lage zu sein, zwischen ihnen auszuwählen, und wählen Sie auch nächste und vorherige, aber die Bildlaufleiste funktioniert nicht, jede Hilfe mit diesem würde geschätzt werden! Vielen Dank!
Vielleicht brauchen Sie 'photolist.config (xscrollcommand = scrl.set)'. Zumindest einige Beispiele, die ich gefunden habe, haben diese Art von Linie. –
Ihr Code hat Syntaxfehler (Zeilen enden in '/') –