Tkinter中label.grid布局失效问题求助
Tkinter中label.grid布局失效问题求助
嘿,我看了你的代码,发现两个关键问题导致grid布局没按预期生效,咱们来一步步解决:
问题1:错误使用tkinter.Tk()创建新窗口
Tkinter规定一个程序应该只有一个主Tk实例,新的弹窗/子窗口必须用tkinter.Toplevel()来创建。如果创建多个Tk实例,会生成独立的事件循环,很容易引发布局错乱、事件响应异常等奇怪问题。
问题2:未配置grid的行/列权重
默认情况下,grid的行和列权重都是0,这意味着它们不会随窗口大小变化而扩展,控件会挤在窗口左上角,看起来像是row和column设置没生效。你需要给对应的行和列设置权重,让它们能占据窗口空间。
修改后的__openPreferences方法代码
def __openPreferences(self): # 用Toplevel代替Tk()创建子窗口,依附于主窗口 prefWin = tkinter.Toplevel(self.mainWin) prefWin.title("Preferences - Notebook 1.0") prefWin.geometry("600x300") # 给第1行和第1列设置权重为1,让它们随窗口扩展 prefWin.grid_rowconfigure(1, weight=1) prefWin.grid_columnconfigure(1, weight=1) lblFont = tkinter.Label(prefWin, text="Choose Default Font:") # 可以添加padx/pady让控件和窗口边缘保持距离,更美观 lblFont.grid(row=1, column=1, padx=10, pady=10) # 删掉多余的mainloop,主窗口的mainloop已经在运行了 # prefWin.mainloop()
额外小提示
你代码里的Menu类中,dpdFile菜单重复添加了两次"New"命令,这个小失误可以顺手修正下~
备注:内容来源于stack exchange,提问作者Alessio Spinellino
相关产品推荐
相关产品推荐

