首页 > 解决方案 > 选项卡式 tkinter GUI 中小部件的均匀水平间距

问题描述

我有一个使用 tkinter 编写的带有 gui 的小程序。gui 有三个不同行数的选项卡,如下图所示。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

困扰我的是选项卡底部的空白区域,行数较少。

是否可以将小部件水平均匀分布?

这是使事情到位的代码:

#GUI
root = Tk()
root.title("Mancha de inundação")
root.resizable(False, False)

#tab settings
tabControl = ttk.Notebook(root)

tab1 = ttk.Frame(tabControl)
tab2 = ttk.Frame(tabControl)
tab3 = ttk.Frame(tabControl)

tabControl.add(tab1, text='Passo 1')
tabControl.add(tab2, text='Passo 2', state="disabled")
tabControl.add(tab3, text='Passo 3',  state="disabled")

tabControl.pack(expand=1, fill="both")

#Tab1
#lat long
label_y = Label(tab1, text="Latitude:")
label_y.grid(row=1, column=0, sticky='W', padx=10, pady=10)

label_x = Label(tab1, text="Longitude:")
label_x.grid(row=2, column=0, sticky='W', padx=10, pady=10)

entry_y = Entry(tab1, width=8)
entry_y.grid(row=1, column=1, sticky='E', padx=10, pady=10)

entry_x = Entry(tab1, width=8)
entry_x.grid(row=2, column=1, sticky='E', padx=10, pady=10)

#h v
label_h = Label(tab1, text="Altura da barragem (m):")
label_h.grid(row=3, column=0, sticky='W', padx=10, pady=10)

label_v = Label(tab1, text="Volume armazenado (m³):")
label_v.grid(row=4, column=0, sticky='W', padx=10, pady=10)

entry_h = Entry(tab1, width=8)
entry_h.grid(row=3, column=1, sticky='E', padx=10, pady=10)

entry_v = Entry(tab1, width=8)
entry_v.grid(row=4, column=1, sticky='E', padx=10, pady=10)

#calcular
calcular_crio = Button(tab1, text="Calcular", command=calcular_crio)
calcular_crio.grid(row=5, column=1, sticky='E', padx=10, pady=10)

st1 = ScrolledText(tab1, height=10, width=50)
st1.grid(row=6, column=0, columnspan=2, rowspan=10, sticky='nesw')
wl1 = WidgetLogger(st1)

#Tab2
btn_tracado = Button(tab2, text="Carregar traçado do rio", command=carregar_tracado)
btn_tracado.grid(row=0, column=0, sticky='W', padx=10, pady=10)

btn_srtm = Button(tab2, text="Carregar SRTM", command=carregar_srtm)
btn_srtm.grid(row=1, column=0, sticky='W', padx=10, pady=10)

label_suavi = Label(tab2, text="Número de retas para simplificação:")
label_suavi.grid(row=2, column=0, sticky='W', padx=10, pady=10)
entry_suavi = Entry(tab2, width=8)
entry_suavi.insert(0, "8")
entry_suavi.grid(row=2, column=1, sticky='E', padx=10, pady=10)

label_comp = Label(tab2, text="Comprimento das seções (m):")
label_comp.grid(row=3, column=0, sticky='W', padx=10, pady=10)
entry_comp = Entry(tab2, width=8)
entry_comp.insert(0, "4000")
entry_comp.grid(row=3, column=1, sticky='E', padx=10, pady=10)

#intersections
c_intersec_var = IntVar()
c_intersec = Checkbutton(tab2, text='Desinterceptar seções',variable=c_intersec_var, onvalue=1, offvalue=0, command=enable_maxiter)
c_intersec.grid(row=4, column=0, sticky='W', padx=10, pady=10)

label_maxiter = Label(tab2, text="Número máximo de iterações:")
label_maxiter.grid(row=5, column=0, sticky='W', padx=10, pady=10)
entry_maxiter = Entry(tab2, width=8)
entry_maxiter.insert(0, "1000")
entry_maxiter['state'] = 'disabled'
entry_maxiter.grid(row=5, column=1, sticky='E', padx=10, pady=10)

label_maxtime = Label(tab2, text="Tempo máximo (min):")
label_maxtime.grid(row=6, column=0, sticky='W', padx=10, pady=10)
entry_maxtime = Entry(tab2, width=8)
entry_maxtime.insert(0, "5")
entry_maxtime['state'] = 'disabled'
entry_maxtime.grid(row=6, column=1, sticky='E', padx=10, pady=10)

label_intg = Label(tab2, text="Intervalo giro:")
label_intg.grid(row=7, column=0, sticky='W', padx=10, pady=10)

entry_g = Entry(tab2, width=8)
entry_g.insert(0, "-10, 10")
entry_g['state'] = 'disabled'
entry_g.grid(row=7, column=1, sticky='E', padx=10, pady=10)


btn_export = Button(tab2, text="Exportar seções", command=exportar_secoes)
btn_export.grid(row=8, column=0, sticky='W', padx=10, pady=10)

btn_import = Button(tab2, text="Importar seções", command=importar_secoes)
btn_import.grid(row=8, column=1, sticky='E', padx=10, pady=10)

btn_calculartab2 = Button(tab2, text="Calcular", command=calcular_perpendiculares)
btn_calculartab2.grid(row=9, column=1, sticky='E', padx=10, pady=10)

st2 = ScrolledText(tab2, height=10, width=50)
st2.grid(row=10, column=0, columnspan=2, sticky='E')
wl2 = WidgetLogger(st2)

#Tab3
btn_calculartab3 = Button(tab3, text="Calcular", command=calcular)
btn_calculartab3.grid(row=0, column=0, sticky='W', padx=10, pady=10)

btn_salvartab3 = Button(tab3, text="Salvar shape file", command=salvartab3)
btn_salvartab3['state'] = 'disabled'
btn_salvartab3.grid(row=1, column=0, sticky='W', padx=10, pady=10)

btn_salvarrelatab3 = Button(tab3, text="Salvar relatório", command=salvarrelatab3)
btn_salvarrelatab3['state'] = 'disabled'
btn_salvarrelatab3.grid(row=1, column=1, sticky='E', padx=10, pady=10)

st3 = ScrolledText(tab3, height=10, width=50)
st3.grid(row=2, column=0, columnspan=2, sticky='E')
wl3 = WidgetLogger(st3)

标签: pythonuser-interfacetkintertabswidget

解决方案


推荐阅读