본문 바로가기
관/핫한 파이썬 공부

파이썬의 여러 모듈 공부하기 01.

by 4차원 박스 2019. 9. 16.

파이썬의 여러 모듈중 tkinter 라는것으로 함.

 

본인이 듣는 수업중에서 

파이썬의 모듈을 불러오는 방식과 

그 방법 등을 간략하게 정리하는 포스트이다

 

 

첫수업 : 콘솔이 아닌 gui 창에서 헬로월드 출력하기

c언어는 structural language
자바 c++은 object orienled programing language (oop)

측면에 속해있다.

전자는 함수위주 : 변수와 함수
후자는 클래스 위주 : 속성(변수)과 메소드(함수) / 멤버변수 멤버함수 등으로 불린다

파이썬은 전자 후자 모두 가능함
또한 파이썬은 한줄씩 코드가 실행이 될수있는
인터프리터 언어이며 속도가 느리다.


다음은 파이썬의 모듈들을 제공해주는 사이트로 공식사이트는 아니지만
매우 유용하다.
https://www.lfd.uci.edu/~gohlke/pythonlibs/

(파이썬 버전과 os에 맞게 다운받으면 된다.)

pip로 다운받으면 scripts 파일안에 들어간다.



수업에선 아나콘다를 사용한다.
아나콘다 안에서 환경안의 베이스루트 에서 다른 모듈들을 다운받을수 있다.

아나콘다 프롬프트 창에서 
conda를 붙여 명령어 등으로 필요한 모듈및 패키지를 다운받을수 있다.

아나콘다의 스파이더를 통해 코드를 작성할 수 있다.
여기서 f5를 통해 컴파일한다.

파이썬 gui 모듈 대표
터틀, tkinter pygame pyQT(최근건 유료임) pyGTK wxPython 등등이 있다.
QtDesigner 등이 파이큐티에 있다


수업에 사용할 모듈은 tkinter (파이썬3이 대문자이고 파이썬2는 소문자임)이다.
tci/tk를 파이썬에서 사용할수 있도록한것 이고 리눅스 상에서 쓰인게 발전한것임.

(윈도우 cmd 에서는 대소문자 구별없지만 다른 os상에서는 보통 구별을 한다.)

파이썬2와 3차이는 프린트문의 ()사용 유무와
input의 사용에서 앞에 raw_를 붙이는것임.
또 대소문자 구별이 필요하다는것임.

from tkinter import * 은 티케이인터 상의 모든 클래스나 함수(리소스)를 사용하겠다는 의미
 
클래스와 함수 구별할때 
전자는 대문자로 시작한다.

클래스를 선언하고 라벨을 만들고 팩이라는 함수를 사용하는것이 기본임.

라벨은 이름을적은 책갈피 이고 팩은 윈도우라는 책에 책갈피를 붙이는 것임.

마지막으로 메인루프 함수로 gui화면에 출력한다(이벤트를 실행하고 받을 준비를 하는 의미).

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
from tkinter import* # 파이썬 기본 패키지

window = Tk() # 루트 윈도우 생성 클래스
label= Label(window, text="Hello, World") #Label 도 클래스
label.pack()# 화면에 위젯보이기

window.mainloop() # 이벤트 루트 들어가기

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

이런식으로 사용함 이건 자주 사용 할 것이므로 외워두거나

적어둔다


파이썬을 공부할때 
클래스 부분 부터 oop에 속하는 내용이다.


클래스는 속성과 메소드를, 즉 변수와 함수를 지닌다

window 와 label 은 인스턴스(instance) 라고 부른다

 

클래스 를 붕어빵틀, 그리고
인스턴스는 붕어빵 이라 생각하면 된다.


Tk라는 붕어빵틀에서 붕어빵을 만들때 window라는 붕어빵이 나온다
즉 붕어빵틀만 있으면 붕어빵은 몇개든 만들어낼수 있다.

클래스 안의 함수를 사용하려면 인스턴스를 선언하고

그 인스턴스에 .함수() 
의 형식으로 사용한다

Tk 라는 클래스 안에 mainloop라는 함수를 가짐
Label 이라는 클래스 안에 pack 이라는 함수를 가짐




클래스 불러오는 방법 은 여러갖지가 있다

1. import 모듈명

사용 : 모듈명.함수/클래스 명

2. import 모듈명 as 별명

사용 : 별명.함수/클래스 명

3. from 모듈명 import 함수/클래스 명

사용: 함수/클래스명

4. from 모듈명 import *

사용 : 함수/클래스명

5. from 모듈명 import 함수/클래스 as 별명

사용 : 별명

다음과 같다.


'''
#4.방법이 효율적으로 사용
from tkinter import* # 파이썬 기본 패키지

window = Tk() # 루트 윈도우 생성 클래스
label= Label(window, text="Hello, World") #Label 도 클래스
label.pack()# 화면에 위젯보이기

window.mainloop() # 이벤트 루트 들어가기
'''

'''
#1.방법
import tkinter

window= tkinter.Tk()
label= tkinter.Label(window, text="hellow world")
label.pack()

window.mainloop()
'''

'''
#2.방법
import tkinter as tk

window= tk.Tk()
label= tk.Label(window, text="hellow world")
label.pack()

window.mainloop()
'''


'''
#3.방법
from tkinter import Tk, Label

window=Tk()
label=Label(window, text="hellow world")
label.pack()

window.mainloop()
'''

'''
#5.방법은 별로 추천하지 않는다.
from tkinter import Tk as t
from tkinter import Label as l

window=t()
label=l(window, text="hellow world")
label.pack()

window.mainloop()
'''

클래스 안에 인스턴스가 사용되는 경우가 label 을 초기화 할때 보인다
이는 그냥 라벨이라는 기능이 어디에 라벨링을 할것인지 명시해주는 기능일뿐이다.



참고로 위의 코드는 기본적으로 외워야 할것임.


같은 코드를 완전한 oop형식으로 만드는방법은  아래와 같다.

클래스가 사용될때 

가장 먼저 사용될 함수로 지정하는건
__init__으로 함수 이름을 만드면된다.

__이름__ 의 형식은 예약어임


from tkinter import *

class BasicProgram:
    def __init__(self):
        window = Tk()
        label=Label(window,text="hello world")
        label.pack()
        window.mainloop()
BasicProgram()

함수쓸때 스페이스 꼭 사용할것

from tkinter import *

class BasicProgram:
    def __init__(self):
        window = Tk()
        window.title("my first gui")  #새로 추가한 타이틀에 이름붙이는 함수임
        label=Label(window,text="hello world")
        label.pack()
        window.mainloop()
if __name__ == '__main__' :
    BasicProgram()

if문을통해 자신이 직접여는지 다른곳에서 할때 어떻게 진행하는지 정할때 추가하여 사용한것임.

파이썬은 파일명이 모듈명임

 

다음은 파이썬의 모듈을 만들어 불러오는 경우와 아닌경우의 차이를 

보여주는 코드 이다.

 


from tkinter import*

class MyFrame(frame): #생성사
    def __init__(self, master):
        label=Label(master, text="hello world")
        label.pack()
        
    def __str__(self):
        retrun "테스트"

def start():
    root=Tk()
    myframe = MyFrame(root)
    print(myframe)
    root.mainloop()

if __name__ == '__main__' : #직접사용
    start()
else:
    print("임포트로 사용될경") #다른곳에서 임포트되어 사용되는 경우 출력


클래스 선언시 ()안에는 어디에 있는것을 상속 받아서 사용하겠다는 의미임

또한 함수 안의 self는 자기 자신을 상속받아 쓰겠다는 의미이다. (재귀함수 느낌)

 

 

 


컴포넌트 = 위젯 = 로그인 버튼 창닫기 버튼 같은것들
1. 화면 2. 배치 3. 이벤트 로 gui가 구성된다.

 

다음시간엔 이러한 여러가지 gui 기능들을 

차근차근 살펴볼 예정임.

댓글