강의노트 Frame
Frame
프레임은 단순한 직사각형으로 표시되는 위젯이다. 다른 위젯들을 프레임 내에 위치시켜 그룹핑하여 보여지는 것과 코딩할때 정돈된 형태를 가진다.
프레임의 크기는 프레임 안의 위젯들의 크기와 레이아웃에 따라 결정되지만 사용자가 지정할 수 도있다.
프레임의 tkinter.Frame(여기서는 tk.Frame으로 표시한다.)이나 tkinter.ttk.Frame(ttk.Frame으로 표시) 클래스를 사용하여 생성할 수 있다.
tk.Frame이나 ttk.Frame의 기본적인 프레임 생성은 다음과 같다.
import tkinter as tk
from tkinter import ttk
f1 = ttk.Frame(master, **options)
f2 = tk.Frame(master,**options)
ttk와 tk의 옵션들은 지원하는게 서로 다르다.
- ttk.Frame 옵션들
열 1 | 열 2 |
---|---|
borderwidth | 보더의 width를 설정한다. 기본값은 0이다. |
class | 위젯을 생성할 때 위젯 클래스 이름을 지정할 수 있다. 이 이름은 위젯을 사용자 원하는 모양으로 사용할 수 있다. 위젯이 생성된 후에는 이름을 바꿀 수 없다. |
cursor | 마우스 커서가 위젯위에 있을때 커서를 표시하는 옵션이다. 기본은 " "(empty string)으로 부모 위젯의 커서 속성을 상속받는다. |
width | 프레임 넓이를 설정한다. |
height | 프레임 높이이 설정한다. |
padding | 프레임과 프레임 안의 위젯들 사이의 너비를 설정한다. |
relief | 프레임 테두리의 릴리프를 지정한다. 지원하는 테두리 스타일은 평면(flat), 홈(groove), 돌출(ridge), 융기(solid) 또는 움푹 들어간(sunken) 것들이 있다. 기본은 평면이다. |
style | 위젯의 스타일을 설정한다. |
takefocus | |
width | 프레임 넓이 |
size
프레임을 만들 때 프레임의 높이(height)와 너비(width)를 명시적으로 지정할 수 있다.
f = Frame(master, height=300, width=200)
주의 : 기본적으로 ttk.Frame은 프레임 안의 위젯의 크기에 맞게 재조정된다. 프레임의 크기를 고정하고 싶으면 pack_propagate(False)나 grid_propagate(False)를 지정해야 한다.
background
프레임의 색상을 지정한다. tk.Frame에서 지원하고 ttk에서는 ttk.Style을 활용해야 한다.
f = tk.Frame(master, background='green')
s = ttk.Style( )
s.configure("TFrame",background='green')
f = ttk.Frame(master, style="TFrame")
borders
프레임의 테두리 너비는 borderwidth로 지정한다. 너비의 단위는 픽셀이다. 기본값은 0이다. 즉, 프레임에는 테두리가 없다.
프레임 스타일은 relief로 지정한다. ttk와 tk에서 지원하는 테두리 스타일은 평면(flat), 홈(groove), 돌출(ridge), 융기(solid) 또는 움푹 들어간(sunken) 것들이 있다. 프레임의 기본 테두리 스타일은 평면이다.
padding
프레임 안에 다른 위젯을 배치하는 경우, 위젯과 프레임의 여백을 지정한다. 모든 면에 동일한 패딩을 지정하거나, 가로 및 세로 패딩을 서로 다르게 지정하거나 각 면에 별도로 패딩을 지정할 수 있다.
tkinter.ttk에서 padding설정하기 tkinter.ttk모듈은 padding옵션을 직접지원한다. 이 옵션은 아래의 예제와 같이 설정할 수 있다.
f = Frame(master, padding=5) # 모든 면에 5픽셀의 패딩을 갖는다. f = Frame(master, padding=(5,10)) # 왼쪽과 오른쪽은 5, 위와 아래는 10픽셀의 패딩을 갖는다. f = Frame(master, padding=(5,7,10,12)) # 왼쪽 5, 위쪽 7, 오른쪽 10 그리고 아래쪽은 12픽셀의 패딩을 갖는다.
tk.Frame에서 padding설정하기 tk.Frame에서는 ttk.Frame의 padding을 지원하지 않는다. 여기서는 pack()이나 grid()에서의 padx와 pady를 활용하여 ttk.Frame의 padding과 같이 작동하도록 만들 수 있다.
import tkinter as tk
win = tk.Tk()
root.title("Frame Padding Example (tk.Frame)")
frame = tk.Frame(win, borderwidth=2, relief="groove",background='red')
frame.pack(padx=10, pady=30) # win과 프레임 사이에 가로 10, 세로 30픽셀의 공간을 둔다.
label = tk.Label(frame, text="This is inside the frame.",background='green')
label.pack(padx=30, pady=10) #레이블과 프레임 사이에 세로 30, 가로 10픽셀의 공간은 둔다.
button = tk.Button(frame, text="Click Me",background='gray')
button.pack(padx=10, pady=30)
root.mainloop()
import tkinter as tk
from tkinter import ttk
win = tk.Tk()
win.geometry('200x100')
s = ttk.Style()
s.configure('Danger.TFrame', background='red', borderwidth=15, relief='raised')
ttk.Frame(win, width=100, height=50, style='Danger.TFrame').grid()
win.mainloop()
사용예
import tkinter as tk
from tkinter import ttk
win = tk.Tk()
win.geometry('500x500')
frame = ttk.Frame(win,relief='raised',borderwidth=5,padding=(50,100,150,200))
#frame.configure()
frame.columnconfigure(0, weight=1)
tk.Button(frame, text='Padding1').grid(column=0, row=0)
tk.Button(frame, text='Padding2').grid(column=0, row=1)
tk.Button(frame, text='Padding3').grid(column=0, row=2)
frame.grid(column=0, row=0)
win.mainloop()
작동 방식은
- tkinter 모듈을 임포트합니다:
tkinter를 tk로 임포트 tkinter에서 ttk로 가져오기 코드 언어: JavaScript(자바스크립트) 둘째, create_input_frame() 함수에서 왼쪽 프레임을 만듭니다. 다음 코드는 입력 프레임 내의 모든 위젯에 패딩을 추가합니다:
frame.winfo_children()의 위젯에 대해: widget.grid(padx=0, pady=5) 셋째, create_button_frame() 함수에서 올바른 프레임을 만듭니다.
넷째, create_main_window() 함수에서 루트 창을 만듭니다. 다음 코드는 창에서 최소화/최대화 버튼을 제거합니다:
root.attributes('-toolwindow', True) 코드 언어 PHP(PHP) 이 코드는 Windows에서만 작동합니다.
create_main_window() 함수에서 왼쪽 프레임과 오른쪽 프레임도 생성하고 그리드 지오메트리 관리자를 사용하여 루트 창에 정렬합니다.
마지막으로, if name == “__main__”: 블록에서 create_main_window() 함수를 호출합니다.
Translated with DeepL.com (free version)
로그인 하면 댓글을 쓸 수 있습니다.