<title>TK 파이썬</title>
import tkinter # or from tkinter import *
tkinter.scrolledtext | 수직스크롤바가 포함된 텍스트 윈도우 |
tkinter.colorchooser | 색상 선택 다이얼로그 |
tkinter.commondialog | 다른 다이얼로그의 베이스 클래스 |
tkinter.filedialog | 파일에 대한 공용 다이얼로그 |
tkinter.font | 폰트 |
tkinter.messagebox | tk 표준 다이얼로그 사용 |
tkinter.simpledialog | 기본적인 다이얼로그와 편의 기능(?) |
tkinter.dnd | drag and drop |
turtle | 터틀(タートル)그래픽 (?) 제공 |
#!/usr/bin/env python import tkinter as tk import tkinter.messagebox as mbx class CApp(tk.Frame) : def __init__(self, master=None): super().__init__(master) self.pack() self.create_widgets() def create_widgets(self): self.quitBtn = tk.Button(self, text="Quit", command=self.quit) self.quitBtn.pack(side='bottom') def sayHi(self): mbx.showinfo("INFO","메시지입니다") root = tk.Tk( ) root.title('Window Title') app = CApp(master=root) app.mainloop()
Tk 에서는 윈도우의 크기와 위치정보를 지오메트리(Geometry)라고 부르고, 아래 형식으로 입력한다.
<color green>width</color>x<color green>height</color>±<color green>x</color>±<color green>y</color>
#위의 코드에 조금 덧붙여서 root = tk.Tk( ) root.geometry('300x200+5+40') app = CApp(master=root) app.mainloop()
window.resizable(FALSE, FALSE)
window.minsize(200,100) window.maxsize(500,500)
위젯을 사이즈를 얻고 싶은데, 화면에 반영되지 않아 결과가 <color /silver>1×1</color> 처럼 나온다면,
위젯.update_idletasks() # or 위젯.update()
화면 갱신이 필요한데 아직 안되었을때 , 쓰면 될듯. 이런거 윈도우에도 있었던 것 같은데..
위젯이 있을 위치를 정해서 배치하는 것. pack() 함수를 실행하면 옵션에 따라 위젯을 배치한다.
some_widget.pack() # default 는 'top' some_widget.pack(side='left') some_widget.pack(expand=1)
pack()을 호출해주면, 위에서 아래 방향으로 순서대로 배열된다.크기는 각자 조정.
anchor | 위젯의 중심이겠지. <color /silver>'n'</color> <color /silver>'s'</color> <color /silver>'w'</color> <color /silver>'e'</color> 같은값을 사용한다 |
exapand | 불 값으로 <color /silver>0</color> 이나 <color /silver>1</color>을 쓴다. fill 과 같이 사용하면 채울 수 있다. |
fill | <color /silver>'x'</color>, <color /silver>'y'</color>, <color /silver>'both'</color>, <color /silver>'none'</color> 늘어나는 방향을 설정. |
ipadx, ipady | 슬레이브위젯의 내부 패딩을 설정 |
padx, pady | 슬레이브위젯 외부의 패딩값을 설정 |
side | 값은 <color /silver>'left'</color>, <color /silver>'right'</color>, <color /silver>'top'</color>, <color /silver>'bottom'</color> 이고 위젯의 배열 방향을 설정한다. |
import tkinter as tk root = tk.Tk() # 테스트용 Frame()을 만들고 구분하기 위해 레드로 설정 frame = tk.Frame(root) frame['bg'] = 'red' # pack()을 써보자, 샘플 전부 # frame.pack(fill='both', expand=1, side='left') # 테스트1 frame.pack(fill='both') # 바로 채워질줄 알았는데, 위에 가로만 늘어나고 세로는 작은 한줄정도만 # 테스트2 frame.pack(fill='both', expand=1) # expand를 넣으니 꽉찬 상태로 위젯이 표시되었다. # 새로운 위젯 추가 구분하기 위해 블루 설정 frame2 = tk.Frame(root) frame2['bg'] = 'blue' # 두번째 위젯을 추가해서 배열하면 어떻게 나오나? # 실패: 이렇게 배열하면 두번째꺼 안보임, 두번째거가 살짝 한줄만 frame.pack(fill='both', expand=1) frame2.pack() # 실패: 이렇게 해도 두번째꺼 안보임 frame.pack(fill='both', expand=1) frame2.pack(fill='both') # 성공: 이렇게 하니 위에서 아래로 배열 frame.pack(fill='both', expand=1) frame2.pack(fill='both', expand=1) # 실패: 좌->우 방향이 되려면. 두번째꺼가 안보임 frame.pack(fill='both', expand=1, side='left') frame2.pack(fill='both', expand=1) # 성공: 좌->우 방향이 되려면. 두번째꺼가 안보임 frame.pack(fill='both', expand=1, side='left') frame2.pack(fill='both', expand=1, side='left') #frame2.pack(fill='both', expand=1, side='right') #샘플 root.title('Title') root.geometry('640x400+5+40') root.mainloop()
이것처럼 만들어보기.
<color /silver>expand</color>, <color /silver>fill</color>을 쓰라고 .. (아직 안해봐서)
대상오브젝트.pack(fill="none", expand=True)
화면 분할. 레퍼런스
좀 더 도움이 되는 문서 http://foster-johnson.com/grid.html
사용되기 전에, 어떻게 분할 것인지 미리 정의해두면 거기에 맞게 배열된다.
초기화를 따로 하진 않고, grid() 함수가 쓰일때마다 최대 값을 알아서 설정하는 듯하다.
윈도우 크기만큼 자식 위젯이 늘어나는 grid 배열 예
xx.grid(column=0, row=0) # 0,0 위치에 배열 xx.grid(column=3, row=0, columnspan=2) # 컬럼 3번째에서부터 2칸 연속 사용 # row 쪽은 rowspan 을 사용해서 가로지르기를 구현한다.
from tkinter import * from tkinter import ttk root = Tk() content = ttk.Frame(root) frame = ttk.Frame(content, borderwidth=5, relief="sunken", width=200, height=100) namelbl = ttk.Label(content, text="Name") name = ttk.Entry(content) onevar = BooleanVar() twovar = BooleanVar() threevar = BooleanVar() onevar.set(True) twovar.set(False) threevar.set(True) one = ttk.Checkbutton(content, text="One", variable=onevar, onvalue=True) two = ttk.Checkbutton(content, text="Two", variable=twovar, onvalue=True) three = ttk.Checkbutton(content, text="Three", variable=threevar, onvalue=True) ok = ttk.Button(content, text="Okay") cancel = ttk.Button(content, text="Cancel") content.grid(column=0, row=0) frame.grid(column=0, row=0, columnspan=3, rowspan=2) namelbl.grid(column=3, row=0, columnspan=2) name.grid(column=3, row=1, columnspan=2) one.grid(column=0, row=3) two.grid(column=1, row=3) three.grid(column=2, row=3) ok.grid(column=3, row=3) cancel.grid(column=4, row=3) root.mainloop()
따로 옵션이 없고, grid를 3×3 으로 설정해서 가운데 배치되도록 하는 방법으로.
# 3x3 그리드 사용. configure()로 하는거 없이 그냥 비중 설정만해서 있는 것으로 세팅한다. 오브젝트.grid(row=1, column=1) 부모오브젝트.grid_rowconfigure(0, weight=1) 부모오브젝트.grid_rowconfigure(2, weight=1) 부모오브젝트.grid_columnconfigure(0, weight=1) 부모오브젝트.grid_columnconfigure(2, weight=1)
from tkinter import font def some_func(): font = font.Font(famaily='Helvetica', size=13) # 어딘가에서 쓰기
정해진 기본폰트 (Tcl Fonts)
TkDefaultFont | The default for all GUI items not otherwise specified. |
TkTextFont | Used for entry widgets, listboxes, etc. |
TkFixedFont | A standard fixed-width font. |
TkMenuFont | The font used for menu items. |
TkHeadingFont | The font typically used for column headings in lists and tables. |
TkCaptionFont | A font for window and dialog caption bars. |
TkSmallCaptionFont | A smaller caption font for subwindows or tool dialogs |
TkIconFont | A font for icon captions. |
TkTooltipFont | A font for tooltips. |
TkDefaultFont 를 바꿔보자
from tkinter import font default_font = font.nametofont("TkDefaultFont") # 기본 폰트 가져와서 default_font.configure(family='Arial', size=13) # 설정 변경
<color black/lightgray>padding</color> 옵션은 <color black/lightgray>ttk.Frame</color> 을 위한 것. <color black/lightgray>tkinter.Frame</color>라면 <color black/lightgray>padx</color>, <color black/lightgray>pady</color> 를 써야한다.