Tkinter按钮无法自适应填充窗口问题求助
Tkinter按钮无法自适应填充窗口问题求助
嘿,我帮你揪出问题啦!你的代码里犯了一个布局管理器混用的小错误,这就是按钮没法自适应填充窗口的核心原因~
你看,你已经用grid把frame放到root窗口里了(frame.grid(row=0, column=0, sticky=N+S+E+W)),但最后又调用了frame.pack()——Tkinter里同一个父组件下绝对不能同时混用grid和pack两种布局管理器,这会直接打乱整个布局的逻辑,导致之前设置的所有自适应规则全部失效。
只需要做一个小修改就能解决问题,把最后一行的frame.pack()删掉就行!另外我也帮你把代码整理得更清晰了一些:
import tkinter as tk from tkinter import N, S, E, W grid_size = 3 root = tk.Tk() root.geometry(f"{grid_size*70}x{grid_size*70}") root.title("Tic Tac Toe") # 配置root的网格,让frame能填满整个窗口 tk.Grid.rowconfigure(root, 0, weight=1) tk.Grid.columnconfigure(root, 0, weight=1) frame = tk.Frame(root) frame.grid(row=0, column=0, sticky=N+S+E+W) Flip = True class Game(): def __init__(self, X, Y): self.team = ' ' # 配置frame的网格行和列,让按钮能填满对应单元格 tk.Grid.rowconfigure(frame, X, weight=1) tk.Grid.columnconfigure(frame, Y, weight=1) self.button = tk.Button( frame, text=' ', fg='white', font=('Arial', 20), command=self.Set_Var ) self.button.grid(row=X, column=Y, sticky=N+S+E+W) def Set_Var(self): global Flip if self.team == ' ': if Flip: self.button.configure(text='X', bg='lightblue') self.team = 'X' Flip = False else: self.button.configure(text='O', bg='lightgreen') self.team = 'O' Flip = True # 创建所有游戏按钮 for I in range(grid_size): for J in range(grid_size): Game(I,J) # 移除多余的frame.pack()!这是问题的关键 root.mainloop()
再给你划几个重点:
- 删掉
frame.pack()后,之前用grid设置的布局规则就能正常生效了; - 你其实已经正确配置了root和frame的行/列权重,还有按钮的
sticky=N+S+E+W属性,这些都能保证窗口缩放时,按钮跟着填满整个区域; - 我把几何尺寸的字符串拼接改成了f-string,只是让代码可读性更好,功能和原来完全一致~
现在运行修改后的代码,按钮应该就能自适应填充窗口,而且拖动窗口调整大小时,按钮也会跟着同步缩放啦!
备注:内容来源于stack exchange,提问作者Haise
相关产品推荐
相关产品推荐

