2017-12-12 114 views
1

파이썬에서는 tkinter 모듈을 사용하여 로그인 화면을 만듭니다. 올바른 위치에있는 모든 위젯에 대해 완벽하게 작동하지만 유일한 문제는 화면을 더 크게 드래그하면 위젯 크기가 기본 창의 크기에 비례하여 증가하지 않는다는 것입니다. 전체 코드는 here이지만 미니멀리스트 코드는 아래에 있습니다.Tkinter 프레임 안의 프레임 크기 조정

from tkinter import * 

root = Tk() 

f1 = Frame(root) 
f1.grid(row=0, column=0, sticky='news') 

enter = Frame(f1) 

e1 = Entry(enter,font=('Consolas',15),width=25) 
e1.insert(0,'E-mail') 
e1.pack(pady=10) 

e2 = Entry(enter,font=('',15),show='*',width=25) 
e2.insert(0,'E-mail') 
e2.pack(pady=20) 
enter.grid(row=1,column=0,columnspan=3,padx=20,sticky='nsew') 

loginframe = Frame(f1) 
loginbutton = Button(loginframe,text='Login!',bg='lightblue',height=2,width=39) 
loginbutton.pack() 
loginframe.grid(row=2,column=0,columnspan=3,sticky='ew') 

account = Frame(f1) 
Label(account,text="Don't have an account yet?").pack(side=LEFT) 
link = Label(account,text="Sign Up!",cursor='hand2',fg='blue', 
       font=('Helvetica',8,'underline')) 
link.pack(side=BOTTOM) 

account.pack() 
account.grid(row=3,column=0,columnspan=3) 

root.mainloop() 
+0

정확하게 확장되지 않는 것은 무엇입니까? – Nae

+0

'frame.grid (행 = 0, 열 = 0, 스티키 = '뉴스')'는 네 개의 프레임을 모두 똑같은 노드에 저장합니다. – Nae

+0

f1 내부의 위젯. frame.grid를 사용하여 모두 올리면 raise_frame 함수가 주어진 프레임을 다른 프레임 위로 올립니다. – Crawley

답변

3

기본적으로 열과 행은 크기가 변경되지 않지만이를 사용하여 변경할 수 있습니다.

columnconfigure(col_number, weight=1) 
rowconfigure(row_number, weight=1) 

서로 다른 weight 두 행이있을 경우 빠른 크기가 조정됩니다 weight 큰 함께 행.

프레임에 배경색을 추가하여 어느 것이 여전히 크기를 변경하지 않는지 확인했습니다.

from tkinter import * 

root = Tk() 

root.columnconfigure(0, weight=1) 
root.rowconfigure(0, weight=1) 

f1 = Frame(root, bg='red') 
f1.grid(row=0, column=0, sticky='news') 

f1.columnconfigure(0 , weight=1) 
f1.rowconfigure(1, weight=1) 
#f1.rowconfigure(2, weight=1) 

enter = Frame(f1, bg='green') 
enter.grid(row=1, column=0,columnspan=3,padx=20, sticky='nsew') 

loginframe = Frame(f1) 
loginframe.grid(row=2,column=0,columnspan=3, sticky='ew') 

e1 = Entry(enter,font=('Consolas',15),width=25) 
e1.insert(0,'E-mail') 
e1.pack(pady=10) 

e2 = Entry(enter,font=('',15),show='*',width=25) 
e2.insert(0,'E-mail') 
e2.pack(pady=20) 

loginbutton = Button(loginframe,text='Login!',bg='lightblue',height=2,width=39) 
loginbutton.pack() 

account = Frame(f1) 
account.grid(row=3,column=0,columnspan=3) 

Label(account,text="Don't have an account yet?").pack(side=LEFT) 
link = Label(account,text="Sign Up!",cursor='hand2',fg='blue', 
       font=('Helvetica',8,'underline')) 
link.pack(side=BOTTOM) 

root.mainloop() 

크기 조정하기 전에 :

enter image description here

은 후 columnconfigure와 크기를 조정하고 rowconfigure :

columnconfigure없이 enter image description here

rowconfigure

enter image description here

+0

오, 고맙습니다. 그래서'columconfigure'와'rowconfigure'를'root'만으로 사용하는 대신에'f1'에 대해서도 사용할 필요가 있습니다. – Crawley

+0

둘 모두에서 사용해야 할 수도 있습니다. 둘 다 사용합니다. 배경색을 추가하면 크기가 변하지 않는 것을 볼 수 있습니다. – furas