Tcl / Tk: развернуть окно / определить, развернуто ли окно? - PullRequest
1 голос
/ 07 августа 2010

Могу ли я узнать, развернуто ли мое окно верхнего уровня, и могу ли я максимизировать его программно?Я использую пакет tcltk R 8.5 в Windows XP.

Причина в том, что я хочу принудительно вызвать событие <Visibility>, сначала вызвав отзыв, а затем деиконифицировав.Однако, если окно было развернуто до этих двух вызовов функций, оно не после этих вызовов.Есть ли более простой способ обеспечить соблюдение этого события?

Ответы [ 2 ]

1 голос
/ 09 августа 2010

Вы можете узнать, развернуто ли окно с помощью wm state $toplevel (ищите zoomed в качестве возвращаемого значения). Но ...

ОС не генерирует <Visibility> событий для вас должным образом в Windows; Вы только получаете их на отображаемом окне, и это немного отличается. (Windows говорит вам гораздо меньше о порядке размещения и его последствиях, чем X; Tk довольно близок к модели X.) Вы не говорите, зачем вам это событие; может быть, есть что-то еще, что послужит вашей реальной цели?

1 голос
/ 07 августа 2010

Написал функцию, которая передает событие Visibility данному виджету и всем его дочерним элементам.

tkevent.propagate <- function(w,e) {
  tkevent.generate(w, e)
  children <- as.character(tkwinfo("children", w))
  if(length(children)>0) lapply(children, function(c) tkevent.propagate(c,e))
}

Таким образом, мне не нужно звонить по телефону вывести / обработать и передать мое событие каждому виджету.

...