#6 전자액자 프로젝트 - 소스보기 1/2

2022. 3. 26. 00:59IT

전자액자 프로젝트의 소스코드는 두 개의 파일로 이루어져 있다. 이번 포스팅에서 보는 소스는 main.py 파일이다. 아래에서 전체 소스코드를 볼 수 있다. github에서 받아도 무방하지만 github가 익숙하지 않은 분들도 있을 수 있으니 아래의 소스를 카피해서 main.py에 복사해 넣으면 된다. 다음 포스팅에서는 PhotoFile.py을 볼 것이다. 

 

이 파일에서 주로 수정을 해야 할 부분은 중의 하나는 DURATION이다. 이것을 조정해서 사진이 바뀌는 간격을 조정할 수 있다. 더 중요한 사항은 PHOTO_FILE_PATH 일텐데 파일을 저장해 놓은 곳의 경로를 적어야 한다. 윈도우 프로그램으로 한다면 C:\나 D:\로 시작하는 경로가 될 것이고 나와 같이 라즈베리파이를 사용한다면 /로 시작하는 경로가 들어갈 것이다. 

import os
import tkinter as tk
from tkinter import *
from PIL import ImageTk
from time import sleep

from PhotoFile import Photo

DATA_FILE_NAME  = "photolist.txt"
PHOTO_FILE_PATH = "/Volumes/sohyemini/Photo/Original"
DURATION        = 5

class PhotoFrame(tk.Tk):
    def __init__(self, window=None):
        super().__init__()

        #self.config(cursor='none')

        self.overrideredirect(True)
        if True:
            self.geometry("%dx%d+%d+%d" % (self.winfo_screenwidth()+10, self.winfo_screenheight()+10, -5, -5))
            self.canvas = Canvas(self, width=self.winfo_screenwidth()+10, height=self.winfo_screenheight()+10, bg='black')
        else:
            self.geometry("%dx%d+%d+%d" % (500, 500, 0, 0))
            self.canvas = Canvas(self, width=400, height=400, bg='black')

        self.canvas.pack()

        if os.path.exists(DATA_FILE_NAME):
            os.remove(DATA_FILE_NAME)
        #######
        # 파일 리스트를 만든다.
        self.Photo = Photo(DATA_FILE_NAME, PHOTO_FILE_PATH)
        self.Photo.createFileList()

        self.Run()

    def on_click(self, event):
        print("Exit")

    def Run(self):
        while(1):
            self.displayPhoto()
            sleep(DURATION)


    def displayPhoto(self):
        image, fname, p_date = self.Photo.getRandomPhoto()
        wW = int(self.winfo_screenwidth()) -10
        wH = int(self.winfo_screenheight()) -10


        # 이미지 사이즈는 4:3(1.3)  16:9(1.77)  3:2(1.5) |   3:4(0.75) 9:16(0.56) 2:3(0.67)
        # 화면 사이즈는 1920:1080 (1.78) 1:1
        if image.width/image.height > wW/wH:
            imageH = wH
            imageW = int(image.width * wH / image.height)
        else:
            imageW = wW
            imageH = int(image.height * wW / image.width)

        x = int((wW - imageW) / 2) + 5
        y = int((wH - imageH) / 2) + 5

        pic = image.resize((imageW, imageH))
        picture = ImageTk.PhotoImage(pic)

        w = len(fname)
        pathw = len(PHOTO_FILE_PATH) + 1
        str = fname[pathw:w] + f" ------- [{p_date}]"

        self.canvas.create_image(x, y, anchor=NW, image=picture)
        self.canvas.delete('nameTags')
        self.canvas.create_text(wW/2, wH - 10, text=str, font=("나눔고딕코딩", 14), fill="green", tags=('nameTags',))
        #self.canvas.create_text(wW / 2, 500, text=str, font=("나눔고딕코딩", 14), fill="green", tags=('nameTags',))
        self.canvas.update()


if __name__ == "__main__":
    app = PhotoFrame()
    app.mainloop()

 

 

반응형