【问题标题】:Tkinter resizing frames inside frameTkinter 在框架内调整框架大小
【发布时间】:2017-12-12 19:46:32
【问题描述】:

在 python 中,我使用 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()

【问题讨论】:

  • 究竟是什么没有扩展?
  • frame.grid(row=0, column=0, sticky='news') 将所有四个帧放置到同一个确切节点。
  • f1 中的小部件。我使用 frame.grid 将它们全部放置,并且我的 raise_frame 函数将给定的框架提升到其他框架之上
  • 请通过添加a Minimal, Complete and Verifiable example 改进您的问题。正如你在用不完整的代码示例问一个不清楚的问题。
  • 为您的问题创建最小的工作示例,以便我们可以运行它并查看问题。

标签: python tkinter tkinter-layout


【解决方案1】:

默认列和行不会改变大小,但您可以使用它来改变它。

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()

调整大小之前:

使用columnconfigurerowconfigure 调整大小后 :

没有columnconfigurerowconfigure

【讨论】:

  • 哦,非常感谢,所以不要在root 上使用columconfigurerowconfigure,我还需要在f1 上使用它们
  • 您可能必须同时使用两者。我两个都用。如果您添加背景颜色,那么您会看到哪个不会改变大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多