Difference between revisions of "트킨터"

Jump to navigation Jump to search
48 bytes added ,  11:32, 6 April 2018
no edit summary
Line 206: Line 206:
자세한 내용은 아래 링크 참조
자세한 내용은 아래 링크 참조
* tkinter grid method http://studioplug.tistory.com/220
* tkinter grid method http://studioplug.tistory.com/220
= 체크버튼, 콤보박스 넣기 =
== 레이블 안에 이미지 넣기 ==
1. Tkinter 위젯
앞 아티클에서 언급했듯이, Tkinter는 제한된(Limited) 핵심 위젯들만을 제공하고 있다. 아래는 Tkinter가 제공하는 주요 위젯들이다.
위젯 / 설명
Button 단순한 버튼
Label 텍스트 혹은 이미지 표시
CheckButton 체크박스
Entry 단순한 한 라인 텍스트 박스
ListBox 리스트 박스
RadioButton 옵션 버튼
Message Label과 비슷하게 텍스트 표시. Label과 달리 자동 래핑 기능이 있다.
Scale 슬라이스 바
Scrollbar 스크롤 바
Text 멀티 라인 텍스트 박스로서 일부 Rich Text 기능 제공
Menu 메뉴 Pane
Menubutton 메뉴 버튼
Toplevel 새 윈도우를 생성할 때 사용. Tk()는 윈도우를 자동으로 생성하지만 추가로 새 윈도우 혹은 다이얼로그를 만들 경우 Toplevel를 사용한다
Frame 컨테이너 위젯. 다른 위젯들을 그룹화할 때 사용
Canvas 그래프와 점들로 그림을 그릴 수 있으며, 커스텀 위젯을 만드는데 사용될 수도 있다
2. 위젯 사용
위젯은 객체를 생성하여 필요한 속성들을 지정하여 사용한다. 위젯은 부모 컨테이너와 연관하여 어떤 상대적 위치에 놓이게 되는데, 앞에 설명한 Geometry Manager를 사용하여 각 위젯의 위치를 정하게 된다.
아래 예제는 레이블 안에 이미지를 넣고 화면에 보여주는 코드로서, MyFrame 이라는 클래스를 만들고 생성자에서 필요한 위젯들을 배치하고 있다. 우선 main() 에서는 Tk 객체 root를 만들고 title()을 사용하여 윈도우 제목을 설정하고, geometry()를 사용하여 윈도우의 크기와 좌표를 정해주었다. geometry() 안의 문자열은 윈도우 크기 및 좌표를 "가로x세로+X+Y" 형식으로 표현한다. X는 모니터의 왼쪽으로부터 몇 픽셀이나 떨어졌나, Y는 모니터의 위쪽으로부터의 거리이며, -일 경우 오른쪽과 아래쪽으로부터의 거리이다.
MyFrame 클래스는 Frame으로부터 상속된 파생클래스이고, 생성자에서 Label 하나를 추가하고 있다. Label은 좌표 (0,0)에 위치(place)하게 되고, 레이블 안에는 이미지를 넣고 있다. 이미지는 tkinter의 PhotoImage 클래스를 사용하고 있는데, 이 클래스는 .gif 파일 (혹은 PGM) 만을 읽을 수 있다. 다른 이미지 포맷을 사용하기 위해서는 외부 모듈을 사용해야 한다. PhotoImage() 에 이미지 파일을 적고 리턴된 객체를 레이블에 지정하면 되는데, 특히 가비지 컬렉션으로부터 삭제되는 것을 방지하기 위해 lbl.image = img 처럼 레퍼런스를 증가시켜 준다.
from tkinter import *
class MyFrame(Frame):
    def __init__(self, master):
        img = PhotoImage(file='[[로리]].gif')
        lbl = Label(image=img)
        lbl.image = img  # 레퍼런스 추가
        lbl.place(x=0, y=0)
def main():
    root = Tk()
    root.title('[[로린이]] [[보지]]')
    root.geometry('500x400+10+10')
    myframe = MyFrame(root)
    root.mainloop()
if __name__ == '__main__':
    main()
예제로 배우는 파이썬 프로그래밍 - Tkinter 위젯 http://pythonstudy.xyz/python/article/121-Tkinter-%EC%9C%84%EC%A0%AF
== 체크버튼 ==
checkbutton 위젯 체크버튼
이번에는 윈도우에 체크버튼을 추가해 보겠습니다. 아래 코드를 보세요.
from tkinter import *     
from tkinter import ttk     
from tkinter import messagebox
win = Tk()                 
def clickMe():               
    messagebox.showinfo('[[유두]] 만져졌다', "누군가 만졌다!")
action = ttk.Checkbutton(win, text='내 유두를 만져줘', command = clickMe)
action.grid(column=1, row=0)
win.mainloop() 
앞에서 본 Button 위젯의 예제를 재활용하였습니다.
라인7에서 Button이 Checkbutton으로 변경되었죠? 이 코드를 실행하면 버튼 대신 체크버튼이 윈도우에 추가됩니다. 그외의 부분은 동일한데요. Button위젯과 마찬가지로 체크버튼을 마우스로 클릭하면 clickMe() 함수가 실행되고 그 결과 메시지 박스가 실행됩니다.
Checkbutton 위젯 추가
체크버튼의 경우 GPIO 출력 값을 High, Low 중에 선택할때 사용하기 좋습니다.
아래는 여러 개의 체크버튼 위젯을 생성하고, 그 중 어떤 버튼이 체크되었는지 확인하는 예제입니다. 간단해서 눈으로만 봐도 이해할 수 있습니다.
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
win = Tk()
win.title("나에게 [[삽입]]해줘!")
win.geometry('200x100+200+200')
def clickMe():
    str = <nowiki>''</nowiki>
    if cVar1.get() == 1:
        str = str + '[[입]]에 [[사정]] 당함, '
    if cVar2.get() == 1:
        str = str + '[[보지]]에 사정 당함, '
    if cVar3.get() == 1:
        str = str + '[[항문]]에 사정 당함, '
    if str == <nowiki>''</nowiki>:
        str = "nothing was checked"
    messagebox.showinfo("[[임신]] 당함", str)
cVar1 = IntVar()
c1 = ttk.Checkbutton(win, text="입", variable = cVar1)
c1.grid(column=0, row=0)
cVar2 = IntVar()
c2 = ttk.Checkbutton(win, text="보지", variable = cVar2)
#c2.deselect()
c2.grid(column=0, row=1)
cVar3 = IntVar()
c3 = ttk.Checkbutton(win, text="항문", variable = cVar3)
#c3.deselect()
c3.grid(column=0, row=2)
action=ttk.Button(win, text="나에게 사정해줘!!", command=clickMe)
action.grid(column=0, row=3)
win.mainloop()
라인18, 라인21, 라인25에서는 체크버튼과 연결해서 사용할 변수를 생성하였습니다.
라인19, 라인22, 라인26 에서 체크버튼 위젯을 생성하였습니다. 체크버튼 위젯을 생성할 때 'variable = 변수명' 처럼 체크버튼의 상태값을 저장할 변수를 설정해 주었습니다. 예를 들어 라인19에 variable = cVar1 이라는 코드에 따라 생성한 체크버튼의 상태값은 cVar1이라는 변수에 연동됩니다. 체크버튼에 연동된 변수들은 해당 체크버튼이 선택되면 1 값으로 선택되지 않으면 0 값으로 설정됩니다.
라인7 ~ 라인17은 clickMe() 함수입니다.
라인9에서는 라인19에서 생성한 체크박스가 선택되었는지 확인합니다. 선택된 경우는 cVar1.get() 이 1값을 가지고, 선택되지 않은 경우는 cVar1.get() 은 0 값을 가집니다.
라인23에 deselect() 라는 함수는 체크박스가 선택되지 않은 상태로 만들어 줍니다. 파이썬에서 # 로 시작하는 라인은 실행되지 않는 주석문입니다.
코드를 실행하면 아래와 같은 윈도우가 나타납니다.
다수의 체크박스 위젯
윈도우가 나타나면 기능을 테스트 해봐야죠. 체크박스 위젯 중 [[보지]]와 [[항문]]을 클릭해서 위의 그림처럼 선택합니다. 그리고, "나에게 사정해줘!!"라는 버튼을 클릭합니다.
선택된 체크박스를 보여주는 메시지창
현재 선택된 체크박스를 메시지 박스에서 알려주고 있습니다.
intVar()
위의 예제에서는 intVar() 생성자로 변수를 생성하였습니다. 이렇게 만들어진 변수는 위젯과 연결된 변수라는 의미로 생각하세요. 위젯의 값이 변하면 변수값이 변하고, 변수 값이 변해도 위젯 상태가 변하도록 연결해 줍니다.
TKinter chekcbutton 체크버튼 위젯 intVar https://blog.naver.com/audiendo/220789279239
== 텍스트박스 ==
textbox 위젯
윈도우에서 사용자의 키보드 입력을 받기 위해서는 텍스트박스 위젯을 사용합니다. 텍스트박스 위젯의 경우도 위젯과 연결된 변수를 사용해서 입력 문자열을 처리할 수 있습니다.
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
win = Tk ()
win.title("[[너]]가 가장 좋아하는 [[체위]]는?")
win.geometry('500x100+200+200')
def clickMe():
    messagebox.showinfo("[[나]]에게 [[실험]]해봐!", str.get())
str = StringVar()
textbox = ttk.Entry(win, width=50, textvariable=str)
textbox.grid(column = 0 , row = 0)
action=ttk.Button(win, text="[[보지]]에 쑤셔죠!", command=clickMe)
action.grid(column=0, row=1)
win.mainloop()
라인9에서 텍스트위젯과 연결할 str 변수를 생성하였습니다. 이번에는 사용한 생성자는 str 타입을 처리할 수 있는 StringVar() 입니다.
라인10에서 ttk.Entry() 메소드를 호출하여 텍스트박스 위젯을 생성하였습니다. "텍스트박스 위젯"은 생성자이름이 Entry() 예요. 이때 width=20 에서 텍스트박스 너비를 20 문자크기로 설정하였습니다. 그리고 textvariable = str 에서 라인9에서 생성한 변수를 텍스트박스 위젯과 연결하였습니다. 이제부터 텍스트박스에 키보드 입력이 들어오면 그래돌 str 변수에 반영됩니다. 물론 그 반대 방향으로도 반영됩니다.
그외에 grid()나 Button() 함수 설명은 이전 포스트에 설명되어 있으므로 생략하겠습니다.
라인12에서 생성된 버튼위젯에 연결된 함수(라인 7~라인8) clickMe()가 실행되면, str.get() 메소드를 이용하여 텍스트박스 위젯에 입력된 문자열을 가져와서 메시지 박스에 보여줍니다.
코드를 실행하면 아래와 같습니다.
Textbox 위젯을 추가한 윈도우
키보드 등으로부터 문자열을 입력받을 수 있는 텍스트박스 위젯이 생성되었습니다. 여기에 1234567 이라고 입력을 하였습니다. 그리고 'Click Me' 버튼을 클릭합니다.
Textbox 입력 문자열 출력
텍스트박스에 입력된 문자열을 정확히 보여주는 메시지 박스가 나타납니다. 이제 텍스트박스 위젯에 입력된 문자열을 구해오는 방법은 아시겠죠?
TKinter textbox 텍스트박스 위젯 https://blog.naver.com/audiendo/220791080634
== 콤보박스 ==
combobox 위젯
텍스트 박스 위젯은 키보드를 이용해서 문자열을 사용자가 입력할 수 있도록 해줍니다. 하지만, 정해진 메뉴 내에서 선택을 하게 만드는 경우는 마우스만으로 조작이 가능한 콤보박스위젯을 사용하면 편리합니다. 입력할 문자열의 종류가 사전에 정해져 있는 경우 사용해야 합니다.
콤보박스는 메뉴를 가집니다. 메뉴는 리스트로 만들어 지고, 리스트를 콤보박스의 속성에 연결 시켜줌으로서 메뉴 등록을 완료할 수 있습니다.
아래 코드를 볼께요.
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
win = Tk ()
win.title("[[근친상간]]")
win.geometry('200x100+200+200')
def clickMe():
    messagebox.showinfo("[[임신]] 완료", str.get())
str = StringVar()
combo = ttk.Combobox(win, width=20, textvariable=str)
combo['values'] = ('[[엄마]]', '[[누나]]', '[[여동생]]', '[[딸]]')
combo.grid(column = 0 , row = 0)
combo.current(0)
action=ttk.Button(win, text="[[강간]]", command=clickMe)
action.grid(column=0, row=1)
win.mainloop()
라인9에서 콤보위젯과 연동할 변수 str 를 생성하였습니다.
라인10에서 ttk.Combobox() 함수로 콤보박스 위젯을 생성했습니다. 동시에 str 변수와 콤보박스 위젝을 연동하였습니다.
라인 11에서 콤보박스에 리스트를 생성하여 콤보박스 위젯의 values 속성에 할당하였습니다. 이로써 콤보박스에 메뉴가 등록되었습니다. 메뉴는 총 4 항목인데, '[[엄마]]', '[[누나]]', '[[여동생]]', '[[딸]]' 입니다.
라인13에서 콤보박스에 메뉴항목 4개 중에서 0 번째 'apple'이 선택된 상태로 만들어 주었습니다. 만일 윈도우 생성시 'pear'가 선택되어 있도록 만들고 싶으면 combo.current(3)으로 하면 됩니다.
그외에 앞의 포스팅에서 설명한 것들은 생략합니다.
코드 실행결과를 보겠습니다.
combo box 위젯 + button 위젯
콤보박스 위젯 메뉴 중에 '엄마'가 선택되어 있는 것이 보이시죠? 위젯 우측의 아래로 화살표 부분을 클릭하면 나머지 메뉴들을 볼 수 있습니다.
콤보박스에 등록된 문자열들
자~ 이중 '여동생'을 선택하겠습니다. 선택하고 '강간' 버튼을 클릭합니다.
콤보박스에서 선택된 문자열
메시지 창에 '여동생'이 선택되었음을 보여줍니다.
TKinter combobox 콤보박스 위젯 https://blog.naver.com/audiendo/220792145212
== 프레임 여러개 만들고 각각 텍스트박스 집어넣음 ==
3. 입력 화면 예제
아래 예제는 고객 데이타를 입력 받는 간단한 윈도우 샘플이다. 메인 Frame 안에 4개의 자식 Frame을 사용하였고, 각각의 자식 Frame 안에 레이블, 텍스트, 버튼 등의 위젯들을 추가하였다.
from tkinter import *
from tkinter.ttk import *
class MyFrame(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
 
        self.master = master
        self.master.title("[[오피걸]] 고객 입력")
        self.pack(fill=BOTH, expand=True)
 
        # 성명
        frame1 = Frame(self)
        frame1.pack(fill=X)
 
        lblName = Label(frame1, text="성명", width=10)
        lblName.pack(side=LEFT, padx=10, pady=10)
 
        entryName = Entry(frame1)
        entryName.pack(fill=X, padx=10, expand=True)
 
        # 회사
        frame2 = Frame(self)
        frame2.pack(fill=X)
 
        lblComp = Label(frame2, text="회사명", width=10)
        lblComp.pack(side=LEFT, padx=10, pady=10)
 
        entryComp = Entry(frame2)
        entryComp.pack(fill=X, padx=10, expand=True)
 
        # 특징
        frame3 = Frame(self)
        frame3.pack(fill=BOTH, expand=True)
 
        lblComment = Label(frame3, text="특징", width=10)
        lblComment.pack(side=LEFT, anchor=N, padx=10, pady=10)
 
        txtComment = Text(frame3)
        txtComment.pack(fill=X, pady=10, padx=10)
 
        # 저장
        frame4 = Frame(self)
        frame4.pack(fill=X)
        btnSave = Button(frame4, text="저장")
        btnSave.pack(side=LEFT, padx=10, pady=10)
 
 
def main():
    root = Tk()
    root.geometry("600x550+100+100")
    app = MyFrame(root)
    root.mainloop()
if __name__ == '__main__':
    main()
예제로 배우는 파이썬 프로그래밍 - Tkinter 위젯 http://pythonstudy.xyz/python/article/121-Tkinter-%EC%9C%84%EC%A0%AF


= 객체 지향 프로그래밍(클래스 사용) =
= 객체 지향 프로그래밍(클래스 사용) =
Line 1,220: Line 1,526:


Python,tkinter pack() [공간 다루기] https://blog.naver.com/dudwo567890/130167237607
Python,tkinter pack() [공간 다루기] https://blog.naver.com/dudwo567890/130167237607
= 레이블 안에 이미지 넣기 =
1. Tkinter 위젯
앞 아티클에서 언급했듯이, Tkinter는 제한된(Limited) 핵심 위젯들만을 제공하고 있다. 아래는 Tkinter가 제공하는 주요 위젯들이다.
위젯 / 설명
Button 단순한 버튼
Label 텍스트 혹은 이미지 표시
CheckButton 체크박스
Entry 단순한 한 라인 텍스트 박스
ListBox 리스트 박스
RadioButton 옵션 버튼
Message Label과 비슷하게 텍스트 표시. Label과 달리 자동 래핑 기능이 있다.
Scale 슬라이스 바
Scrollbar 스크롤 바
Text 멀티 라인 텍스트 박스로서 일부 Rich Text 기능 제공
Menu 메뉴 Pane
Menubutton 메뉴 버튼
Toplevel 새 윈도우를 생성할 때 사용. Tk()는 윈도우를 자동으로 생성하지만 추가로 새 윈도우 혹은 다이얼로그를 만들 경우 Toplevel를 사용한다
Frame 컨테이너 위젯. 다른 위젯들을 그룹화할 때 사용
Canvas 그래프와 점들로 그림을 그릴 수 있으며, 커스텀 위젯을 만드는데 사용될 수도 있다
2. 위젯 사용
위젯은 객체를 생성하여 필요한 속성들을 지정하여 사용한다. 위젯은 부모 컨테이너와 연관하여 어떤 상대적 위치에 놓이게 되는데, 앞에 설명한 Geometry Manager를 사용하여 각 위젯의 위치를 정하게 된다.
아래 예제는 레이블 안에 이미지를 넣고 화면에 보여주는 코드로서, MyFrame 이라는 클래스를 만들고 생성자에서 필요한 위젯들을 배치하고 있다. 우선 main() 에서는 Tk 객체 root를 만들고 title()을 사용하여 윈도우 제목을 설정하고, geometry()를 사용하여 윈도우의 크기와 좌표를 정해주었다. geometry() 안의 문자열은 윈도우 크기 및 좌표를 "가로x세로+X+Y" 형식으로 표현한다. X는 모니터의 왼쪽으로부터 몇 픽셀이나 떨어졌나, Y는 모니터의 위쪽으로부터의 거리이며, -일 경우 오른쪽과 아래쪽으로부터의 거리이다.
MyFrame 클래스는 Frame으로부터 상속된 파생클래스이고, 생성자에서 Label 하나를 추가하고 있다. Label은 좌표 (0,0)에 위치(place)하게 되고, 레이블 안에는 이미지를 넣고 있다. 이미지는 tkinter의 PhotoImage 클래스를 사용하고 있는데, 이 클래스는 .gif 파일 (혹은 PGM) 만을 읽을 수 있다. 다른 이미지 포맷을 사용하기 위해서는 외부 모듈을 사용해야 한다. PhotoImage() 에 이미지 파일을 적고 리턴된 객체를 레이블에 지정하면 되는데, 특히 가비지 컬렉션으로부터 삭제되는 것을 방지하기 위해 lbl.image = img 처럼 레퍼런스를 증가시켜 준다.
from tkinter import *
class MyFrame(Frame):
    def __init__(self, master):
        img = PhotoImage(file='[[로리]].gif')
        lbl = Label(image=img)
        lbl.image = img  # 레퍼런스 추가
        lbl.place(x=0, y=0)
def main():
    root = Tk()
    root.title('[[로린이]] [[보지]]')
    root.geometry('500x400+10+10')
    myframe = MyFrame(root)
    root.mainloop()
if __name__ == '__main__':
    main()
예제로 배우는 파이썬 프로그래밍 - Tkinter 위젯 http://pythonstudy.xyz/python/article/121-Tkinter-%EC%9C%84%EC%A0%AF
= 체크버튼 =
checkbutton 위젯 체크버튼
이번에는 윈도우에 체크버튼을 추가해 보겠습니다. 아래 코드를 보세요.
from tkinter import *     
from tkinter import ttk     
from tkinter import messagebox
win = Tk()                 
def clickMe():               
    messagebox.showinfo('[[유두]] 만져졌다', "누군가 만졌다!")
action = ttk.Checkbutton(win, text='내 유두를 만져줘', command = clickMe)
action.grid(column=1, row=0)
win.mainloop() 
앞에서 본 Button 위젯의 예제를 재활용하였습니다.
라인7에서 Button이 Checkbutton으로 변경되었죠? 이 코드를 실행하면 버튼 대신 체크버튼이 윈도우에 추가됩니다. 그외의 부분은 동일한데요. Button위젯과 마찬가지로 체크버튼을 마우스로 클릭하면 clickMe() 함수가 실행되고 그 결과 메시지 박스가 실행됩니다.
Checkbutton 위젯 추가
체크버튼의 경우 GPIO 출력 값을 High, Low 중에 선택할때 사용하기 좋습니다.
아래는 여러 개의 체크버튼 위젯을 생성하고, 그 중 어떤 버튼이 체크되었는지 확인하는 예제입니다. 간단해서 눈으로만 봐도 이해할 수 있습니다.
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
win = Tk()
win.title("나에게 [[삽입]]해줘!")
win.geometry('200x100+200+200')
def clickMe():
    str = <nowiki>''</nowiki>
    if cVar1.get() == 1:
        str = str + '[[입]]에 [[사정]] 당함, '
    if cVar2.get() == 1:
        str = str + '[[보지]]에 사정 당함, '
    if cVar3.get() == 1:
        str = str + '[[항문]]에 사정 당함, '
    if str == <nowiki>''</nowiki>:
        str = "nothing was checked"
    messagebox.showinfo("[[임신]] 당함", str)
cVar1 = IntVar()
c1 = ttk.Checkbutton(win, text="입", variable = cVar1)
c1.grid(column=0, row=0)
cVar2 = IntVar()
c2 = ttk.Checkbutton(win, text="보지", variable = cVar2)
#c2.deselect()
c2.grid(column=0, row=1)
cVar3 = IntVar()
c3 = ttk.Checkbutton(win, text="항문", variable = cVar3)
#c3.deselect()
c3.grid(column=0, row=2)
action=ttk.Button(win, text="나에게 사정해줘!!", command=clickMe)
action.grid(column=0, row=3)
win.mainloop()
라인18, 라인21, 라인25에서는 체크버튼과 연결해서 사용할 변수를 생성하였습니다.
라인19, 라인22, 라인26 에서 체크버튼 위젯을 생성하였습니다. 체크버튼 위젯을 생성할 때 'variable = 변수명' 처럼 체크버튼의 상태값을 저장할 변수를 설정해 주었습니다. 예를 들어 라인19에 variable = cVar1 이라는 코드에 따라 생성한 체크버튼의 상태값은 cVar1이라는 변수에 연동됩니다. 체크버튼에 연동된 변수들은 해당 체크버튼이 선택되면 1 값으로 선택되지 않으면 0 값으로 설정됩니다.
라인7 ~ 라인17은 clickMe() 함수입니다.
라인9에서는 라인19에서 생성한 체크박스가 선택되었는지 확인합니다. 선택된 경우는 cVar1.get() 이 1값을 가지고, 선택되지 않은 경우는 cVar1.get() 은 0 값을 가집니다.
라인23에 deselect() 라는 함수는 체크박스가 선택되지 않은 상태로 만들어 줍니다. 파이썬에서 # 로 시작하는 라인은 실행되지 않는 주석문입니다.
코드를 실행하면 아래와 같은 윈도우가 나타납니다.
다수의 체크박스 위젯
윈도우가 나타나면 기능을 테스트 해봐야죠. 체크박스 위젯 중 [[보지]]와 [[항문]]을 클릭해서 위의 그림처럼 선택합니다. 그리고, "나에게 사정해줘!!"라는 버튼을 클릭합니다.
선택된 체크박스를 보여주는 메시지창
현재 선택된 체크박스를 메시지 박스에서 알려주고 있습니다.
intVar()
위의 예제에서는 intVar() 생성자로 변수를 생성하였습니다. 이렇게 만들어진 변수는 위젯과 연결된 변수라는 의미로 생각하세요. 위젯의 값이 변하면 변수값이 변하고, 변수 값이 변해도 위젯 상태가 변하도록 연결해 줍니다.
TKinter chekcbutton 체크버튼 위젯 intVar https://blog.naver.com/audiendo/220789279239
= 텍스트박스 =
textbox 위젯
윈도우에서 사용자의 키보드 입력을 받기 위해서는 텍스트박스 위젯을 사용합니다. 텍스트박스 위젯의 경우도 위젯과 연결된 변수를 사용해서 입력 문자열을 처리할 수 있습니다.
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
win = Tk ()
win.title("[[너]]가 가장 좋아하는 [[체위]]는?")
win.geometry('500x100+200+200')
def clickMe():
    messagebox.showinfo("[[나]]에게 [[실험]]해봐!", str.get())
str = StringVar()
textbox = ttk.Entry(win, width=50, textvariable=str)
textbox.grid(column = 0 , row = 0)
action=ttk.Button(win, text="[[보지]]에 쑤셔죠!", command=clickMe)
action.grid(column=0, row=1)
win.mainloop()
라인9에서 텍스트위젯과 연결할 str 변수를 생성하였습니다. 이번에는 사용한 생성자는 str 타입을 처리할 수 있는 StringVar() 입니다.
라인10에서 ttk.Entry() 메소드를 호출하여 텍스트박스 위젯을 생성하였습니다. "텍스트박스 위젯"은 생성자이름이 Entry() 예요. 이때 width=20 에서 텍스트박스 너비를 20 문자크기로 설정하였습니다. 그리고 textvariable = str 에서 라인9에서 생성한 변수를 텍스트박스 위젯과 연결하였습니다. 이제부터 텍스트박스에 키보드 입력이 들어오면 그래돌 str 변수에 반영됩니다. 물론 그 반대 방향으로도 반영됩니다.
그외에 grid()나 Button() 함수 설명은 이전 포스트에 설명되어 있으므로 생략하겠습니다.
라인12에서 생성된 버튼위젯에 연결된 함수(라인 7~라인8) clickMe()가 실행되면, str.get() 메소드를 이용하여 텍스트박스 위젯에 입력된 문자열을 가져와서 메시지 박스에 보여줍니다.
코드를 실행하면 아래와 같습니다.
Textbox 위젯을 추가한 윈도우
키보드 등으로부터 문자열을 입력받을 수 있는 텍스트박스 위젯이 생성되었습니다. 여기에 1234567 이라고 입력을 하였습니다. 그리고 'Click Me' 버튼을 클릭합니다.
Textbox 입력 문자열 출력
텍스트박스에 입력된 문자열을 정확히 보여주는 메시지 박스가 나타납니다. 이제 텍스트박스 위젯에 입력된 문자열을 구해오는 방법은 아시겠죠?
TKinter textbox 텍스트박스 위젯 https://blog.naver.com/audiendo/220791080634
= 콤보박스 =
combobox 위젯
텍스트 박스 위젯은 키보드를 이용해서 문자열을 사용자가 입력할 수 있도록 해줍니다. 하지만, 정해진 메뉴 내에서 선택을 하게 만드는 경우는 마우스만으로 조작이 가능한 콤보박스위젯을 사용하면 편리합니다. 입력할 문자열의 종류가 사전에 정해져 있는 경우 사용해야 합니다.
콤보박스는 메뉴를 가집니다. 메뉴는 리스트로 만들어 지고, 리스트를 콤보박스의 속성에 연결 시켜줌으로서 메뉴 등록을 완료할 수 있습니다.
아래 코드를 볼께요.
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
win = Tk ()
win.title("[[근친상간]]")
win.geometry('200x100+200+200')
def clickMe():
    messagebox.showinfo("[[임신]] 완료", str.get())
str = StringVar()
combo = ttk.Combobox(win, width=20, textvariable=str)
combo['values'] = ('[[엄마]]', '[[누나]]', '[[여동생]]', '[[딸]]')
combo.grid(column = 0 , row = 0)
combo.current(0)
action=ttk.Button(win, text="[[강간]]", command=clickMe)
action.grid(column=0, row=1)
win.mainloop()
라인9에서 콤보위젯과 연동할 변수 str 를 생성하였습니다.
라인10에서 ttk.Combobox() 함수로 콤보박스 위젯을 생성했습니다. 동시에 str 변수와 콤보박스 위젝을 연동하였습니다.
라인 11에서 콤보박스에 리스트를 생성하여 콤보박스 위젯의 values 속성에 할당하였습니다. 이로써 콤보박스에 메뉴가 등록되었습니다. 메뉴는 총 4 항목인데, '[[엄마]]', '[[누나]]', '[[여동생]]', '[[딸]]' 입니다.
라인13에서 콤보박스에 메뉴항목 4개 중에서 0 번째 'apple'이 선택된 상태로 만들어 주었습니다. 만일 윈도우 생성시 'pear'가 선택되어 있도록 만들고 싶으면 combo.current(3)으로 하면 됩니다.
그외에 앞의 포스팅에서 설명한 것들은 생략합니다.
코드 실행결과를 보겠습니다.
combo box 위젯 + button 위젯
콤보박스 위젯 메뉴 중에 '엄마'가 선택되어 있는 것이 보이시죠? 위젯 우측의 아래로 화살표 부분을 클릭하면 나머지 메뉴들을 볼 수 있습니다.
콤보박스에 등록된 문자열들
자~ 이중 '여동생'을 선택하겠습니다. 선택하고 '강간' 버튼을 클릭합니다.
콤보박스에서 선택된 문자열
메시지 창에 '여동생'이 선택되었음을 보여줍니다.
TKinter combobox 콤보박스 위젯 https://blog.naver.com/audiendo/220792145212
= 프레임 여러개 만들고 각각 텍스트박스 집어넣음 =
3. 입력 화면 예제
아래 예제는 고객 데이타를 입력 받는 간단한 윈도우 샘플이다. 메인 Frame 안에 4개의 자식 Frame을 사용하였고, 각각의 자식 Frame 안에 레이블, 텍스트, 버튼 등의 위젯들을 추가하였다.
from tkinter import *
from tkinter.ttk import *
class MyFrame(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
 
        self.master = master
        self.master.title("[[오피걸]] 고객 입력")
        self.pack(fill=BOTH, expand=True)
 
        # 성명
        frame1 = Frame(self)
        frame1.pack(fill=X)
 
        lblName = Label(frame1, text="성명", width=10)
        lblName.pack(side=LEFT, padx=10, pady=10)
 
        entryName = Entry(frame1)
        entryName.pack(fill=X, padx=10, expand=True)
 
        # 회사
        frame2 = Frame(self)
        frame2.pack(fill=X)
 
        lblComp = Label(frame2, text="회사명", width=10)
        lblComp.pack(side=LEFT, padx=10, pady=10)
 
        entryComp = Entry(frame2)
        entryComp.pack(fill=X, padx=10, expand=True)
 
        # 특징
        frame3 = Frame(self)
        frame3.pack(fill=BOTH, expand=True)
 
        lblComment = Label(frame3, text="특징", width=10)
        lblComment.pack(side=LEFT, anchor=N, padx=10, pady=10)
 
        txtComment = Text(frame3)
        txtComment.pack(fill=X, pady=10, padx=10)
 
        # 저장
        frame4 = Frame(self)
        frame4.pack(fill=X)
        btnSave = Button(frame4, text="저장")
        btnSave.pack(side=LEFT, padx=10, pady=10)
 
 
def main():
    root = Tk()
    root.geometry("600x550+100+100")
    app = MyFrame(root)
    root.mainloop()
if __name__ == '__main__':
    main()
예제로 배우는 파이썬 프로그래밍 - Tkinter 위젯 http://pythonstudy.xyz/python/article/121-Tkinter-%EC%9C%84%EC%A0%AF




234

edits

Navigation menu