3

我想在 linux (kde,vnc) 上打开一个 Tcl/Tk 对话框并将一些信息放入:

package require Tk
toplevel .my
pack [label .my.l -text "hallo"]

这样做,对话框打开,新对话框成为焦点。

我怎样才能防止这种情况?

package require Tk
toplevel .my
<something with> .my
pack [label .my.l -text "hallo"]

我看到了几个关于类似主题的问题,但没有关于 Tcl/Tk 的问题。

4

2 回答 2

0

这高度依赖于窗口管理器。对于 metacity 和 marco,有一个名为 'focus-new-windows' 的设置可以更改为 'strict'。

配合 marco 窗口管理器:

gsettings set org.mate.Marco.general focus-new-windows strict

我不使用 KDE,但您可以尝试:系统设置 -> 窗口行为 -> 焦点,看看那里是否有帮助的设置。

Compiz 在常规选项 -> 焦点中有一个焦点预防设置。

于 2015-07-09T16:47:56.890 回答
0

这是我的解决方案:

 1  package require Tk

 2  proc leave {w e} {
 3      puts "gui left $w $e ..."
 4      if {$e != $w}  return
 5      focusHandler::restore

 6  }

 7  proc press {w} {
 8      puts "press $w"
 9      focusHandler::save
10      bind $w <Leave> focusHandler::restore
11      wm overrideredirect  [winfo toplevel $w] 0
12      raise  $w
13      focus -force $w
14      wm overrideredirect  [winfo toplevel $w] 1

15  }

16  namespace eval focusHandler {
17      variable helper
18  }
19  proc focusHandler::save {} {
20      variable helper
21      if ![info exists helper] {
22          puts "create helper"
23          set helper .xxx[clock clicks]
24          # create a new toplevel window
25          # this is controlled by the window manager
26          toplevel $helper
27          wm geometry $helper 0x0-1-1
28      }
29      puts "set focus of helper $helper"
30      raise $helper
31      update 
32      after 100
33  }
34  proc focusHandler::restore {} {
35      variable helper
36      if ![info exists helper] return
37      # destroy this toplevel and windows manager focus on the last know window
38      # which is not this gui, because of overrideredirect
39      destroy $helper
40      unset helper
41  }

42  wm withdraw .
43  toplevel .my
44  wm overrideredirect  .my 1
45  text .my.text  -height 10 -width 40
46  button .my.exit -command exit -text exit
47  bind .my.text <ButtonPress-1> [list press %W]
48  pack .my.text
49  pack .my.exit
于 2015-07-13T10:36:37.820 回答