관리 메뉴

지나가는 이야기

[Python] tkinter를 이용한 파일 내용 출력 프로그램 본문

Computer language : 컴퓨터 언어/Python

[Python] tkinter를 이용한 파일 내용 출력 프로그램

지나가는 이야기 2020. 6. 26. 18:40
728x90
반응형

 

tkinter을 이용한 프로그램을 만들어 보겠습니다.

(프로그램 소스 코드는 참고용으로 만든 것 입니다. 한번 프로그램 짜보시는걸 추천 드립니다.)

 

[조건]

1. 표시되는 내용은 모두 Label로 처리하고 Button으로 다음 자료를 구성한다.

2. 이미지 옆에는 반드시 3줄 이상에 걸쳐 자료에 대한 정보를 출력한다.

3. 화면 크기를 이미지와 텍스트에 맞춰서 알맞게 지정한다.

4. 이미지의 내용을 저장한 data_info.txt 파일의 내용을 불러와서 Label을 구성한다.

 

위 사진은 data_info.txt의 내용이다.

위 사진은 실행 결과이다.

 

먼저 tkinter를 사용하기 위해 import를 한다.

from tkinter import *

window = Tk()

 

그리고 메인타이틀과, 화면 크기를 지정한다.

window.title("My Favorite Baseball Team")
window.geometry("500x250")
window.resizable(False, False)

위 코드의 resizable()는 화면 늘리기 기능이다. x, y 순서로 False면 기능이 없고 True면 기능 사용이다.

 

data_info.txt 파일을 읽기 위해 해당 파일을 open 한다.

f = open("data_info.txt", 'r', encoding="UTF-8")

 

Label구성과 Button구성, 그리고 레이아웃 구성은 기본적으로 알고 있을 거라 생각하므로 생략하겠습니다.

from tkinter import *

window = Tk()
window.title("My Favorite Baseball Team")           # Tkinter 타이틀명
window.geometry("500x250")                          # 화면 사이즈 크기 구성
window.resizable(False, False)                      # 화면 늘리기 기능 없앰

f = open("data_info.txt", 'r', encoding="UTF-8")    # data_info.txt 파일 읽기모드로 오픈
lines = f.readline()                                # data_info.txt 파일의 첫 번째 줄만 가지고 옴
for line in lines:
    lis = lines.split(":")                          # data_info.txt 내용을 :을 기준으로 나눔

label = ['', '', '', '', '', '']                    # 정보를 출력할 Label을 반복문을 사용하기 위해 리스트 생성(6개의 Lable을 사용하기 때문에 크기가 6인 리스트 생성함)

# 첫 번째 화면 구성
for i in range(0, 6):
    label[i] = Label(text=lis[i])                   # 반복문을 이용해서 리스트에 Lable 내용을 넣음

# 두 번째 화면 구성
lines_2 = f.readlines()                             # data_info.txt 파일의 내용을 전부 읽음
for line in lines_2:
    lis_2 = line.split(":")                         # 파일의 모든 줄을 읽기 때문에 여기서 :을 기준으로 나눠지는 줄은 마지막 줄이 된다.

label[0].pack()                                     # 중앙 상단의 라벨 표시

img = PhotoImage(file="hanwha.png")                 # 이미지 파일 불러오기
w = Label(window, image=img).pack(side="left")      # 왼쪽에 이미지 표시

# 이미지에 대한 정보를 라벨로 출력
label[1].place(x = 330, y = 40)
label[2].place(x = 330, y = 70)
label[3].place(x = 330, y = 100)
label[4].place(x = 330, y = 140)
label[5].place(x = 330, y = 160)


def previous():                                     # 이전 버튼을 클릭 했을 때 이벤트
    for i in range(0, 6):
        label[i].configure(text=lis[i])             # 다음 버튼 클릭시 첫 번째 화면 구성으로 Lable의 text를 변환

def next():                                         # 다음 버튼을 클릭 했을 때 이벤트
    for i in range(0, 6):
        label[i].configure(text=lis_2[i])           # 다음 버튼 클릭시 두 번째 화면 구성으로 Lable의 text를 변환

# 이전 버튼 구성
button_1 = Button(window, text = "이전", command = previous)
button_1.place(x = 330, y = 200)

# 다음 버튼 구성
button_2 = Button(window, text = "다음", command = next)
button_2.place(x = 435, y = 200)

window.mainloop()

위 코드는 전체 코드이다.

 

 

프로그램이 정상적으로 실행되는 것을 볼 수 있다.

 

728x90
반응형
Comments