Уведомления

Группа в Telegram: @pythonsu

#1 Май 6, 2020 16:28:19

Konstantin1984+
Зарегистрирован: 2020-02-04
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с клонированием картинки в Canvas tkinter

Имею задумку сделать менеджер папок, начал с размещения визуальных объектов на холсте - картинка папки и картинка файла в зависимости от того, что находится в папке. Через цикл задал создание группы виджетов, но почему-то программа выводит только последний элемент. Код ниже.

 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()

В чем проблема?

Отредактировано FishHook (Май 6, 2020 16:42:35)

Офлайн

#2 Май 6, 2020 16:30:00

Konstantin1984+
Зарегистрирован: 2020-02-04
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с клонированием картинки в Canvas tkinter

Опечатка: фрагмент, начинающийся с “elif”, уехал вправо.

Офлайн

#3 Май 6, 2020 16:31:39

Konstantin1984+
Зарегистрирован: 2020-02-04
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с клонированием картинки в Canvas tkinter

А вообще-то нет. Это первый “if” должен быть правее.

Офлайн

#4 Май 6, 2020 16:42:46

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблема с клонированием картинки в Canvas tkinter

Konstantin1984+
fixed



Офлайн

#5 Май 6, 2020 16:59:57

Konstantin1984+
Зарегистрирован: 2020-02-04
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с клонированием картинки в Canvas tkinter

Что значит fixed? Можно поконкретнее: куда и что дописать?

Офлайн

#6 Май 6, 2020 17:46:22

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблема с клонированием картинки в Canvas tkinter

Konstantin1984+
Что значит fixed?
Это значит, что я исправил
Это первый “if” должен быть правее.
в вашем стартовом посте



Офлайн

#7 Май 6, 2020 17:50:36

Konstantin1984+
Зарегистрирован: 2020-02-04
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с клонированием картинки в Canvas tkinter

А как это Вы исправили, Вы - администратор сайта? А касательно проблемы что можете сказать?

Офлайн

#8 Май 6, 2020 18:54:37

rami
Зарегистрирован: 2018-01-08
Сообщения: 281
Репутация: +  72  -
Профиль   Отправить e-mail  

Проблема с клонированием картинки в Canvas tkinter

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()

Офлайн

#9 Май 6, 2020 19:08:51

Konstantin1984+
Зарегистрирован: 2020-02-04
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с клонированием картинки в Canvas tkinter

Спасибо, rami. Хотя вроде бы только упростил код, но стало работать.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version