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

如何在R与Tcl/Tk中调整窗口大小时获取非顶级Frame几何尺寸

解决非顶级Tk Frame尺寸获取问题

tkwm.geometry()仅支持顶级窗口(比如tktoplevel创建的窗口实例),非顶级组件(如Frame这类容器)需要用winfo系列命令来获取尺寸信息,对应R的tcltk包就是tkwinfo()函数。

正确获取非顶级Frame尺寸的方法

  • 获取组件宽度:tkwinfo("width", 组件对象)
  • 获取组件高度:tkwinfo("height", 组件对象)
  • 获取完整几何信息(格式为宽x高+X偏移+Y偏移):tkwinfo("geometry", 组件对象)

修改后的完整代码

require(tcltk) || stop("tcltk support is absent")

# Main Window
base <- tktoplevel(padx=20, pady=20)
# Change title using tk window manager
tkwm.title(base,'Test App')
# Main Window Frame
main_frame <- tkframe(base)

tools_frame <- tkframe(main_frame)
label <- "Tools Frame"
lab_tools <- tklabel(tools_frame,text=label,width=80)
tkpack(tools_frame,lab_tools)

body_frame <- tkframe(main_frame)

bd_left_frame <- tkframe(body_frame, padx=5, pady=5)

bd_left_label <- tklabel(bd_left_frame, text='Left Body Frame')
tkpack(bd_left_frame, bd_left_label)
tkpack(body_frame, bd_left_frame, side='left', anchor='n', expand=1, fill='both')

bd_right_frame <- tkframe(body_frame, padx=5, pady=5)

bd_right_frame_a <- tkframe(bd_right_frame)

bd_right_label_a <- tklabel(bd_right_frame_a, text='Right Frame A')
tkpack(bd_right_frame_a, bd_right_label_a)
tkpack(bd_right_frame, bd_right_frame_a)

bd_right_frame_b <- tkframe(bd_right_frame)

bd_right_label_b <- tklabel(bd_right_frame_b, text='Right Frame B')
tkpack(bd_right_frame_b, bd_right_label_b)
tkpack(bd_right_frame, bd_right_frame_b)

tkpack(body_frame, bd_right_frame, side='right', anchor='n', expand=1, fill='both')

tkpack(main_frame, tools_frame)
tkpack(main_frame, body_frame)

# CALLBACKS
onResize <- function() {
  # 获取宽高
  width <- tkwinfo("width", bd_right_frame_b)
  height <- tkwinfo("height", bd_right_frame_b)
  # 或者获取完整几何信息
  geo <- tkwinfo("geometry", bd_right_frame_b)
  
  cat("Frame尺寸:宽", width, ",高", height, "\n")
  cat("完整几何信息:", geo, "\n")
}

# Window Event Binds
tkbind(base, '<Configure>', onResize)

tkwait.window(main_frame)

额外说明

当窗口调整大小时,<Configure>事件会触发回调,此时通过tkwinfo()获取的Frame尺寸是实时更新的,可以直接用于后续图像缩放逻辑。

内容的提问来源于stack exchange,提问作者Matheus Fernando

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:54:56