tkinter使用pack和grid实现缩放布局

pack

关键是理解side,anchor,expand,fill的使用。

有一篇文章写的不错,但是要耐心看,反复看,不容易理解。

https://blog.csdn.net/superfanstoprogram/article/details/83713196

import tkinter as tk
import tkinter.ttk as ttk

win=tk.Tk()
win.title("CommunicationTool")
#setting
setFrame = tk.LabelFrame(win,text="Setting")
comFrame = tk.Frame(setFrame)
comLable = tk.Label(comFrame,text="COM Port: ").pack(side=tk.LEFT)
comSpiner = tk.Spinbox(comFrame,text="COM1").pack(side=tk.LEFT)
refrashButton = ttk.Button(comFrame,text="Refresh").pack(side=tk.LEFT)
comFrame.pack(anchor=tk.W)
cmdFrame = tk.Frame(setFrame)
inputLable = tk.Label(cmdFrame,text="Command: ").pack(side=tk.LEFT)
inputEntry = tk.Entry(cmdFrame).pack(side=tk.LEFT,expand=1,fill=tk.X)
sendButton = ttk.Button(cmdFrame,text="Send").pack(side=tk.LEFT)
cmdFrame.pack(anchor=tk.W,expand=1,fill=tk.X)
setFrame.pack(fill=tk.BOTH)
#output
outputFrame = tk.LabelFrame(win,text="Output")
area = tk.Text(outputFrame).pack(expand=1,fill=tk.BOTH)
outputFrame.pack(expand=1,fill=tk.BOTH)

win.mainloop()
  

  

 grid

默认情况下,grid中的部件不缩放。

缩放的关键:

rowconfigure()
columnconfigure()

示例代码:
import tkinter as tk
import tkinter.ttk as ttk

win=tk.Tk()
win.title("CommunicationTool")
win.rowconfigure(1, weight=1)
win.columnconfigure(0, weight=1)
#setting
setFrame = tk.LabelFrame(win,text="Setting")
setFrame.columnconfigure(2, weight=1)
comLable = tk.Label(setFrame,text="COM Port: ").grid(row=0,column=0)
comSpiner = tk.Spinbox(setFrame,text="COM1").grid(row=0,column=1,sticky=tk.EW)
refrashButton = ttk.Button(setFrame,text="Refresh").grid(row=0,column=2,sticky=tk.W)
inputLable = tk.Label(setFrame,text="Command: ").grid(row=1,column=0)
inputEntry = tk.Entry(setFrame).grid(row=1,column=1,sticky=tk.EW,columnspan=2)
sendButton = ttk.Button(setFrame,text="Send").grid(row=1,column=3)
setFrame.grid(row=0,sticky=tk.EW)
#output
outputFrame = tk.LabelFrame(win,text="Output")
outputFrame.rowconfigure(0,weight=1)
outputFrame.columnconfigure(0,weight=1)
area = tk.Text(outputFrame).grid(row=0,sticky=tk.NSEW)
outputFrame.grid(row=1,sticky=tk.NSEW)

win.mainloop()

默认效果:

最大化效果:

posted @ 2019-09-22 20:55  bert_qin  阅读(4148)  评论(0编辑  收藏  举报