2015-07-07 2 views
2

Я хочу, чтобы открыть диалоговое окно, Tcl/Tk на Linux (KDE, VNC) и положить некоторую информацию в:Open желание без кражи фокуса

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 их не было.

+0

Где фокус должен быть вместо этого? Вы можете изменить фокус на другое окно с помощью «focus.» (Здесь я использую '.' Например). В противном случае я не уверен, почему вы хотите предотвратить фокус. Я обнаружил, что на самом деле * хочу * мои вспомогательные окна занимают особое внимание при написании кода для приложений, и это меня нечетко. – Jerry

+0

Это больше связано с оконным менеджером, чем с Tk. К сожалению, не так много оконных менеджеров предотвращают фокус воровства (я недавно прочитал, что Cinnamon поддерживает это). Мне бы очень понравилась эта функция. –

+0

@Jerry: скажем, у меня есть XTERM и запускают TK Gui, основное внимание уделяется графическому интерфейсу TK, и мне нужно сфокусироваться. – tbasien

ответ

0

Это сильно зависит от оконного менеджера. Для metacity и marco существует параметр под названием «focus-new-windows», который можно изменить на «strict».

Mate с оконным менеджером марко:

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

Я не использую KDE, но вы можете попробовать: Системные настройки -> Окно Поведение -> Фокус и посмотреть, если есть установка, что там будет помогать ,

У Compiz есть настройка предотвращения фокуса в общих настройках -> Фокус.

+0

Это мое решение для моей проблемы: – tbasien

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 
Смежные вопросы