#6 전자액자 프로젝트 - 소스보기 1/2
2022. 3. 26. 00:59ㆍIT
전자액자 프로젝트의 소스코드는 두 개의 파일로 이루어져 있다. 이번 포스팅에서 보는 소스는 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()
반응형
'IT' 카테고리의 다른 글
git 사용의 기초 (0) | 2022.03.28 |
---|---|
#7 전자액자 프로젝트 - 소스보기 2/2 (0) | 2022.03.26 |
#5 전자액자 프로젝트 - 따라하기 (0) | 2022.03.21 |
#4 전자액자 프로젝트 - 랜덤 파일 액세스 (0) | 2022.03.19 |
#3 전자액자 프로젝트 - EXIF (0) | 2022.03.19 |