공공 API를 활용한 서울시 버스정보 서비스 2
저번 포스팅에 이어 공공데이터 API를 활용한 서울시 버스정보 서비스를 만들어 보겠습니다.
저번 포스팅에서 서울시 공공API를 이용해서 필요해 정보를 객체지향적으로 정의하여 만들어 보았고 그것을 이용하여 이번 포스팅에서는 Tkinter를 이용하여 윈도우 UI로 표현해 보는게 목표 입니다.
1. tkinter UI 기본 구조
먼저 tkinter의 기본 구조를 만들어 보겠습니다. AppWin 객체 생성시 Frame 객체를 상속 받아 생성자에서 기본 설정을 합니다.
위젯을 배치할때 함수를 정의해서 프레임에 배치하고 각각의 이벤트에 대한 핸들러를 구성하는 형태가 되겠습니다.
import tkinter as tk
class AppWin(tk.Frame):
def __init__(self, root=None, geo=None):
super().__init__(root) # 부모 생성자에 기본 윈도우 전달
self.root = root # 기본 윈도우를 멤버변수로 저장
self.root.geometry(geo) # 윈도우의 크기 및 위치 설정
self.root.resizable(True, True) # 윈도우의 가로, 세로 크기 재조정 가능으로 설정
self.pack()
self.create_widgets()
def create_widgets(self): # 원하는 구성요소 부착
self.title = tk.Label(self, text='버스 정보 앱')
self.title.pack()
self.readBtn = tk.Button(self, text='btn1', command=self.handle1)
self.readBtn.pack()
self.content = tk.Label(self, text='')
self.content.pack()
def handle1(self):
s = 'btn1 click'
print(s)
self.content.config(text=s)
def main():
win = tk.Tk()
app = AppWin(win, '300x300+100+100')
app.mainloop()
main()
btn1 click
기본 UI는 다음과 같이 구상해 보았습니다.
- 버스 번호를 입력시 아래의 리스트 박스에 결과를 출력
(표시 정보: 버스번호, 종점지<->기점지, 운행시간(첫차, 막차), 배차간격 - 리스트에서 버스를 클릭하면 지도에 버스 경로 표시
- 좌측 메뉴에는 버스 정보와 버스 경로를 표시해 주는 기능으로 변환