Tkinter Grid布局下组件无法居中的问题求助
解决Tkinter窗口组件居中问题
你当前的代码使用grid布局时未配置行列权重,也未设置组件在单元格内的对齐方式,导致内容始终偏左上。可以通过以下两种方式修复:
方法1:配置窗口行列权重+组件居中对齐
在窗口初始化后添加行列配置,让组件所在单元格占据窗口剩余空间,同时通过sticky和padx/pady参数让组件在单元格内居中:
import tkinter.filedialog import tkinter as tk from PIL import ImageTk,Image import numpy as np import os import cv2 import matplotlib.pyplot as plt import matplotlib.image as mp import tensorflow as tf def upload(): global img1 global img2 files=tkinter.filedialog.askopenfilenames(parent=win,title='Choose JPG Files') if(len(files)==0): return # 模型逻辑部分保留不变 TEST_XX=np.zeros((36,503,666,2)) a=mp.imread(files[0]) a=cv2.cvtColor(a,cv2.COLOR_BGR2GRAY) b=mp.imread(files[1]) b=cv2.cvtColor(b,cv2.COLOR_BGR2GRAY) TEST_XX[0,:,:,0] = b TEST_XX[0,:,:,1] = a img1=ImageTk.PhotoImage(Image.open(files[1])) img2=ImageTk.PhotoImage(Image.open(files[0])) # 图片标签添加间距和顶部对齐,确保在单元格内居中 tk.Label(win,image=img1,width=250,height=250).grid(row=2,column=0,padx=10,pady=10,sticky='n') tk.Label(win,image=img2,width=250,height=250).grid(row=2,column=1,padx=10,pady=10,sticky='n') print(files) test=TEST_XX[0,:,:,:] test=np.reshape(test,[1,503,666,2]) expected=new_model.predict([test]) # 结果标签设置垂直间距和顶部对齐 tk.Label(win,text='Estimated Soil Moisture Content is: {}'.format(expected[0][0]),font=('times',16,'bold')).grid(row=3,column=0,columnspan=2,pady=20,sticky='n') new_model = tf.keras.models.load_model("C:\\Users\\srira\\Dropbox\\My PC (DESKTOP-7I4SSBF)\\Desktop\\SEM-VII\\MINI-PROJECT\\dataset\\smc_model_v5") win=tk.Tk() win.title("SMC Estimator") win.geometry("600x600") # 配置窗口的行列权重,让第0、1列和第0-3行可随窗口扩展 for col in range(2): win.columnconfigure(col, weight=1) for row in range(4): win.rowconfigure(row, weight=1) font=('times',20,'bold') # 标题和按钮添加垂直间距和顶部对齐 l=tk.Label(win, text='SMC Estimation Using Regression-CNN',font=font) l.grid(row=0,column=0,columnspan=2,pady=20,sticky='n') b=tk.Button(win,text='Upload',font=font,command=lambda: upload()) b.grid(row=1,column=0,columnspan=2,pady=10,sticky='n') win.mainloop()
方法2:用主框架包裹所有组件
创建一个框架承载所有组件,再让框架在窗口中居中显示,这种方式更清晰,适合后续扩展布局:
import tkinter.filedialog import tkinter as tk from PIL import ImageTk,Image import numpy as np import os import cv2 import matplotlib.pyplot as plt import matplotlib.image as mp import tensorflow as tf def upload(): global img1 global img2 files=tkinter.filedialog.askopenfilenames(parent=win,title='Choose JPG Files') if(len(files)==0): return # 模型逻辑部分保留不变 TEST_XX=np.zeros((36,503,666,2)) a=mp.imread(files[0]) a=cv2.cvtColor(a,cv2.COLOR_BGR2GRAY) b=mp.imread(files[1]) b=cv2.cvtColor(b,cv2.COLOR_BGR2GRAY) TEST_XX[0,:,:,0] = b TEST_XX[0,:,:,1] = a img1=ImageTk.PhotoImage(Image.open(files[1])) img2=ImageTk.PhotoImage(Image.open(files[0])) tk.Label(frame,image=img1,width=250,height=250).grid(row=2,column=0,padx=10,pady=10) tk.Label(frame,image=img2,width=250,height=250).grid(row=2,column=1,padx=10,pady=10) print(files) test=TEST_XX[0,:,:,:] test=np.reshape(test,[1,503,666,2]) expected=new_model.predict([test]) tk.Label(frame,text='Estimated Soil Moisture Content is: {}'.format(expected[0][0]),font=('times',16,'bold')).grid(row=3,column=0,columnspan=2,pady=20) new_model = tf.keras.models.load_model("C:\\Users\\srira\\Dropbox\\My PC (DESKTOP-7I4SSBF)\\Desktop\\SEM-VII\\MINI-PROJECT\\dataset\\smc_model_v5") win=tk.Tk() win.title("SMC Estimator") win.geometry("600x600") # 创建主框架并设置为窗口内居中扩展 frame = tk.Frame(win) frame.pack(expand=True, fill='both') # 配置框架的行列权重 for col in range(2): frame.columnconfigure(col, weight=1) for row in range(4): frame.rowconfigure(row, weight=1) font=('times',20,'bold') l=tk.Label(frame, text='SMC Estimation Using Regression-CNN',font=font) l.grid(row=0,column=0,columnspan=2,pady=20,sticky='n') b=tk.Button(frame,text='Upload',font=font,command=lambda: upload()) b.grid(row=1,column=0,columnspan=2,pady=10,sticky='n') win.mainloop()
关键说明
columnconfigure/rowconfigure的weight=1:设置当窗口大小变化时,对应行列会按比例分配剩余空间,保证组件所在单元格能扩展到窗口边缘。sticky='n':让组件在单元格内垂直顶部对齐,配合行列权重可实现整体内容在窗口中垂直居中;若需要完全水平+垂直居中,可将sticky设为nsew并确保组件支持扩展。- 框架包裹:将所有组件放入独立框架,能避免直接在窗口布局的混乱,后续调整布局时只需操作框架内的配置即可。
内容的提问来源于stack exchange,提问作者Sriram M
相关产品推荐
相关产品推荐

