엔트리는 텍스트 박스다. 사용자의 입력(entry)를 받을 수 있는 위젯이다.
사용법은 master = frame 과 width 를 지정해준다. insert 메소드로 초기 텍스트를 지정해 줄 수 있다.
위젯을 창에 나타내는 것은 항상 pack ( )이다. 위젯 객체 생성자 호출 >> pack ( ) 의 흐름이다.
버튼에 command 에 함수를 실행시킨다. 윈도우의 이벤트 처리기와 비슷하다. 클릭하면 액션을 발생시키고 그 액션은 함수다. 예제에서는 간단히 콘솔에 적었지만 set_ 메소드로 GUI 에 표시하거나 다른 액션을 발생시키는 방식으로 프로그램을 설계할 수 있다.
import tkinter as tk
def get_text():
print(text_entry1.get())
print(text_entry2.get())
root = tk.Tk()
root.geometry("320x240")
root.title("Test Tkinter")
frame = tk.Frame(root)
frame.pack()
text_entry1 = tk.Entry(frame, width = 30, bg = 'light blue')
text_entry1.insert(0,"insert first text")
text_entry1.pack(pady = 15)
text_entry2 = tk.Entry(frame, width = 25, bg = 'light blue')
text_entry2.insert(5,"insert second text")
text_entry2.pack(pady = 0)
button = tk.Button(frame, text = 'Get Text', command = get_text)
button.pack(pady = 20)
root.mainloop()
체크버튼이다. 라이오버튼하고 항상 비교가 되는데 체크버튼은 여러개를 선택할 수 있고 (다중 선택) 라디오버튼은 한개만 선택할 수 있는 구조이다. 거기에서 값을 저장하는데 차이가 난다. variable을 따로 설정하는 것은 클릭시에 각각의 체크버튼의 값을 다 가지고 있어야 하기 때문이다.
다른 부분은 위젯들과 같다. 그리고 pack 할때 padx 와 pady를 설정하면 컴포넌트 주위에 공간이 생긴다. 너무 붙어있지 않길 원할 때 사용한다.
import tkinter as tk
def get_var():
print(var1.get())
print(var2.get())
root = tk.Tk()
root.geometry('320x240')
root.title('Entry Test')
frame = tk.Frame(root)
frame.pack()
var1 = tk.IntVar()
var2 = tk.IntVar()
Checkbtn1 = tk.Checkbutton(frame,text="Item 1", variable = var1, command = get_var)
Checkbtn1.pack(pady = 10)
Checkbtn2 = tk.Checkbutton(frame,text="Item 2", variable = var2, command = get_var)
Checkbtn2.pack(pady = 10)
root.mainloop()
라디오버튼은 한개를 클릭하면 그 그룹에서는 한개만 선택이 된다. 체크버튼과 차이나는 부분이다. variable 에 참조식별자를 하나 대입해서 value를 다르게 지정한다. 그러면 하나의 var1 (IntVar 의 클래스 형)에서 한개의 값만 가질 수 있다.
그 부분말고는 체크버튼과 동일하다.
import tkinter as tk
def get_var():
print(var1.get())
root = tk.Tk()
root.geometry('320x240')
root.title('Radio Btn Test')
frame = tk.Frame(root)
frame.pack()
var1 = tk.IntVar()
RadioBtn1 = tk.Radiobutton(frame,text="Python", variable = var1,value = 1, command = get_var)
RadioBtn1.pack(pady = 10)
RadioBtn2 = tk.Radiobutton(frame,text="Java", variable = var1,value = 2, command = get_var)
RadioBtn2.pack(pady = 10)
RadioBtn3 = tk.Radiobutton(frame,text="Java Script", variable = var1,value = 3, command = get_var)
RadioBtn3.pack(pady = 10)
RadioBtn4 = tk.Radiobutton(frame,text="C++", variable = var1,value = 4, command = get_var)
RadioBtn4.pack(pady = 10)
root.mainloop()
레이블은 사용자가 임의로 수정할 수 없는 텍스트 영역이다. Entry 객체에서는 사용자가 입력을 할 수 있었다. 레이블은 사용자에게 보여주기 위한 용도로 쓰인다.
그렇다고 조작이 불가능하지는 않다. 버튼을 사용하고 메소드를 사용해서 레이블을 바꾸거나 하는 동작을 만들면 된다. 이미지와 같이 사용하는 방법 등이 있다.
다른 부분들은 위젯들과 동일하다. 거의 반복되는 예제가 되고 있다.
예제만 반복하면 급체력저하된다
import tkinter as tk
def set_label():
print(var1.get())
root = tk.Tk()
root.geometry('320x240')
root.title('Tkinter Test')
frame = tk.Frame(root)
frame.pack()
var1 = tk.StringVar()
var1.set("Hello Tkinter!")
label = tk.Label(frame, textvariable = var1)
label.pack(pady = 20)
btn = tk.Button(frame,text = "SET", command=set_label)
btn.pack()
root.mainloop()
세부 옵션들에 대하여는 아래 CodersLegacy의 Syntax Table 을 참고한다. 꽤 오래된 GUI 임에도 있을 것은 다 있다. Simple 하고 Powerful 하다.
https://coderslegacy.com/python/python-gui/