You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 15:48:14