tcl / tk-如何使无框窗口在鼠标右键调用的光标位置打开

问题描述

想法是如何打开事件按钮旁边的弹出窗口-获取Onclick鼠标光标位置

就是这样,当单击桌面上的任意位置时,应在鼠标指针位置的Tcl/Tk调用该程序。此Tcl/Tk t程序应没有绣花,窗框。

我知道我在2017年时做得很好,当时我使用Tcl/Tk 8.4显示不带框架的tk窗口。

现在我不记得我是怎么做到的,我需要别人的帮助来清除我的想法。

解决方法

要获取鼠标指针的当前绝对位置,请使用winfo pointerxy $w$w用于确定您在X11上要说的是哪个“显示”,这是无关紧要的。这些天;您实际上可以在那里使用任何窗口,但是无论如何它都是必需的参数。

要将(顶级)窗口移动到指针,请设置其几何形状。结合两者,您将得到:

proc movewintoptr w {
    lassign [winfo pointerxy $w] x y
    wm geometry $w +$x+$y
}

您可能需要考虑稍微偏移窗口。 (确切的说,如何做到最好取决于您在窗口中显示的内容;代码具有特定于应用程序的功能。)


要创建没有装饰的顶级窗口,请执行以下操作:

toplevel $w
wm overrideredirect $w 1

请注意,默认情况下,用户无法轻松地操纵未修饰的窗口。您必须自己实现所有部分(如果相关)。

是的,wm overrideredirect调用应该在创建顶层之后不久。窗口一旦在屏幕上显示,通常就无法在它们之间进行切换(这取决于窗口管理器的工作方式等)。