Найти - Пользователи
Полная версия: Проблема с клонированием картинки в Canvas tkinter
Начало » Python для новичков » Проблема с клонированием картинки в Canvas tkinter
1
Konstantin1984+
Имею задумку сделать менеджер папок, начал с размещения визуальных объектов на холсте - картинка папки и картинка файла в зависимости от того, что находится в папке. Через цикл задал создание группы виджетов, но почему-то программа выводит только последний элемент. Код ниже.
 from tkinter import *
import os
import shutil
from PIL import ImageTk,Image
root=Tk()
root.geometry('520x520')
root.title('Рабочий стол (/home/konstantin/Рабочий стол)')
spisok_elem=os.listdir('/home/konstantin/Рабочий стол')
canvas = Canvas(root,width=500,height=500)
scr = Scrollbar(root,command=canvas.yview)
canvas.configure(yscrollcommand=scr.set)
canvas.grid(row=0,column=0)
scr.grid(row=0,column=1)
x=40;y=40
for elem in spisok_elem:
    if elem.count('.')==0:
        pilImage = Image.open("Папка.png")
        image = ImageTk.PhotoImage(pilImage)
        canvas.create_image(x,y,image=image)  
    elif elem.count('.')!=0:
        pilImage = Image.open("Файл.png")
        image = ImageTk.PhotoImage(pilImage)
        canvas.create_image(x,y,image=image)
    x=x+40
    if x>500:
        x=40
        y=y+40
root.mainloop()

В чем проблема?
Konstantin1984+
Опечатка: фрагмент, начинающийся с “elif”, уехал вправо.
Konstantin1984+
А вообще-то нет. Это первый “if” должен быть правее.
FishHook
Konstantin1984+
fixed
Konstantin1984+
Что значит fixed? Можно поконкретнее: куда и что дописать?
FishHook
Konstantin1984+
Что значит fixed?
Это значит, что я исправил
Это первый “if” должен быть правее.
в вашем стартовом посте
Konstantin1984+
А как это Вы исправили, Вы - администратор сайта? А касательно проблемы что можете сказать?
rami
Konstantin1984+
В чем проблема?
Вы без нужды дёргаете жёсткий диск, он скоро в труху сотрётся.

Вам нужно всего лишь два раза прочитать картинки с диска в две переменные: для файлов и для папок, а затем подставлять нужную картинку в canvas.create_image(x, y, image=image)

 from tkinter import Tk, Canvas, Scrollbar
import os
import shutil
from PIL import ImageTk, Image
 
 
root = Tk()
root.geometry('520x520')
root.title('Рабочий стол (/home/konstantin/Рабочий стол)')
spisok_elem = os.listdir('/home/konstantin/Рабочий стол')
canvas = Canvas(root, width=500, height=500)
scr = Scrollbar(root, command=canvas.yview)
canvas.configure(yscrollcommand=scr.set)
canvas.grid(row=0, column=0)
scr.grid(row=0, column=1)
 
with Image.open('Папка.png') as pilImage:
    fold_img = ImageTk.PhotoImage(pilImage)
 
with Image.open('Файл.png') as pilImage:
    file_img = ImageTk.PhotoImage(pilImage)
 
x = 40
y = 40
 
for elem in spisok_elem:
    if elem.count('.'):
        image = file_img
    else:
        image = fold_img
 
    canvas.create_image(x, y, image=image)
 
    x = x + 40
    if x > 500:
        x = 40
        y = y + 40
 
root.mainloop()
Konstantin1984+
Спасибо, rami. Хотя вроде бы только упростил код, но стало работать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB