# Wm

Команда взаимодействия с менеджером окон.

- Синтаксис
- Описание
- Управление геометрией
- Управление окнами с сеткой
- Ошибки

СИНТАКСИС

wm option window ?args?

ОПИСАНИЕ Команда wm предназначена для взаимодействия с менеджером окон и обеспечивает таким образом управление такими атрибутами окон, как заголовок, размеры и размещение, возможность изменять размер. Команда имеет несколько форм в зависимости от используемых опций. Во всех формах команда предполагает наличие по крайней мере одного аргумента имени toplevel окна.

Ниже перечислены возможные формы команды.

wm aspect window minNumer minDenom maxNumer maxDenom

Если аргументы minNumer, minDenom, maxNume и maxDenom заданы, они передаются менеджеру окон, который использует их для определения допустимых пропорций окна. Пропорции (отношение ширина высота) могут быть в диапазоне от minNumer/minDenom до maxNumer/maxDenom. Если аргументы minNumer и т.д. определены как пустые строки, то существующие ограничения на пропорции отменяются. Если аргументы minNumer и т.д. заданы, то команда возвращает пустое значение. В противном случае она возвращает список из четырех элементов текущих значений minNumer, minDenom, maxNumer, и maxDenom (если ограничения не заданы, возвращается пустая строка).

wm client window name

Если имя name указано (name должно быть именем компьютера, на котором исполняется приложение), то оно сохраняется в свойстве окна WM_CLIENT_MACHINE и может использоваться менеджером окон или менеджером сессий. В этом случае команда возвращает пустую строку. Если аргумент name не задан, команда возвращает последнее установленное ранее значение свойства. Если аргумент name определен как пустая строка, свойство окна WM_CLIENT_MACHINE удаляется.

wm colormapwindows window ?windowList?

Эта команда используется для управления свойством WM_COLORMAP_WINDOWS, которое обеспечивает менеджер окон информацией об окнах, имеющих собственную палитру. Если аргумент windowListне задан, команда возвращает список окон, имеющих собственную палитру. Если аргумент задан, он представляет собой список полных имен окон. Команда изменяет старое значение свойства на новое и возвращает пустую строку. Список окон перечисляет внутренние окна, палитра которых отличается от палитры их логических предков. Порядок, в котором перечислены окна, указывает порядок, в котором менеджер окон просматривает окна, пытаясь разместить новые цвета в палитре. Не указанные в списке окна обрабатываются в последнюю очередь. Если команда не использовалась, Tk автоматически устанавливает свойство для каждого toplevel окна. В списке перечисляются все его внутренние окна, имеющие собственную палитру, в случайном порядке. В конце списка указывается само toplevel окно. Более подробно свойство WM_COLORMAP_WINDOWS описано в (1).

wm command window value

Если аргумент value задан, команда сохраняет его значение в свойстве окна WM_COMMAND, которое используется менеджером окон или менеджером сессий. В этом случае команда возвращает пустую строку. Аргумент value должен содержать список, элементы которого являются словами команды, используемой для запуска приложения (см. также wmuse).

Если аргумент value не задан, команда возвращает последнее установленное ранее значение свойства. Если аргумент name определен как пустая строка, свойство окна WM_COMMAND удаляется.

wm deiconify window

Заставляет окно появиться на экране в нормальном виде (а не в виде иконки, например,). Если окно ранее не появлялось на экране, выполнение команды не приведет к его появлению, но она гарантирует, что если в будущем окно появится, оно появится в нормальном виде. Команда возвращает пустую строку.

wm focusmodel window active|passive

Если тип фокуса для (active или passive) окна указан в команде, он определяет какой тип фокуса будет использоваться. В этом случае команда возвращает пустую строку. Если тип фокуса не указан, команда возвращает текущее значение типа. Активный тип фокуса означает, что окно запрашивает фокус ввода себе или своим потомкам, даже если в этот момент фокус находится в другом приложении. Пассивный фокус означает, что окно не запрашивает фокус, а получает его от менеджера окон. Однако, после того, как окно или один из его потомков получил фокус, приложение может передать его другому потомку окна. По умолчанию устанавливает пассивный фокус.

wm frame window

Если окно заключено менеджером окон в декоративную рамку, команда возвращает идентификатор самой внешней рамки, которая содержит окно (окно, являющееся потомком корневого окна или виртуального корневого окна). Вид идентификатора зависит от платформы. Если окно не заключено в рамку, возвращается идентификатор окна, вид которого также зависит от платформы.

wm geometry window newGeometry

Если задан аргумент newGeometry, размеры и размещение окна изменяются, а команда возвращает пустую строку. В противном случае возвращается последняя информация о размерах и размещении окна (независимо от того, была ли она задана путем изменения размеров окна вручную или с помощью команды wm). Аргумент newGeometry должен быть задан в следующем виде =ширинаxвысота╠x╠y, где любая из частей =ширинаxвысота или ╠x╠y может быть опущена. Ширина и высота должны быть положительными целыми числами, задающими желаемый размер окна. Если для окна задана сетка (см. .Управление окнами с сеткой.), размеры указываются в шагах сетки. В противном случае размеры указываются в пикселях. X и Y определяют желаемое размещение окна на экране в пикселях. Если перед x стоит .+., то величина x определяет расстояние от левого края экрана до левого края окна, в противном случае x задает расстояние от правого края экрана до правого края окна. Если перед y стоит .+., то величина y определяет расстояние от верхнего края экрана до верхнего края окна, в противном случае y задает расстояние от низа экрана до нижнего края окна. Если аргумент newGeometry задан как пустая строка, текущие установленные пользователем размеры окна отменяются и окно приобретает размеры, определяемые размерами составляющих его виджетов.

wm grid window baseWidth baseHeight widthInc heightInc

Команда определяет наличие сетки в окне и позволяет задать шаг сетки в пикселях. BaseWidth и baseHeight определяют в единицах сетки исходный размер окна (определяемый, исходя из размеров виджетов). WidthInc и heightInc определяют соответственно горизонтальный и вертикальный шаг сетки. Таким образом, эти четыре величины определяют множество допустимых размеров окна. После выполнения этой команды команда wm geometry считает размеры окна заданными в шагах сетки. Более того, при ручном изменении размеров менеджер окон показывает размер окна в шагах (ячейках) сетки и позволяет изменять размер только дискретно в целых шагах сетки.
Если BaseWidth и последующие аргументы команды пустые строки, команда указывает, что окно больше не имеет сетки.
Если BaseWidth и последующие аргументы заданы, команда возвращает пустую строку. В противном случае команда возвращает список из четырех элементов, содержащий текущие значения BaseWidth и последующих аргументов. Если окно не имеет сетки возвращается пустая строка.

Замечание. Потребность в использовании команды wm grid возникает относительно редко, поскольку той же функциональности поведения окна можно добиться, например, с помощью опции setGrid в командах создания виджетов.

wm group window pathName

Если аргумент pathName указан, окно pathName становится лидером группы для window. Менеджер окон использует эту информацию, например, для того, чтобы одновременно выводить с экрана все окна группы, если сворачивается лидер группы. Если аргумент pathName представлен пустой строкой, окно window выводится из состава группы.
Если аргумент pathName задан, команда возвращает пустую строку. В противном случае команда возвращает имя текущего лидера группы для окна window или пустую строку, если лидер не определен.

wm iconbitmap window bitmap

Если аргумент bitmap задан, он определяет имя растрового образа, которое передается менеджеру окон для использования в качестве иконки. Имя образа может быть задано в одной из следующих форм:

  @ИмяФайла файл должен содержать описание растрового рисунка в формате, соответствующем стандарту X11 или X10
  name имя образа типа bitmap, ранее созданного в приложении.
  Если аргумент bitmap представляет собой пустую строку, отменяется использование ранее заданного образа.
  Если аргумент bitmap задан, команда возвращает пустую строку. В противном случае команда возвращает имя образа, используемого джля иконки, либо пустую строку, если образ не задан.

wm iconify window

Команда сворачивает указанное окно. Если окно еще не было размещено на экран, оно появится, когда это произойдет, в виде иконки.

wm iconmask window bitmap

Если аргумент bitmap задан, он определяет имя растрового образа, которое передается менеджеру окон для использования в качестве маски для иконки. Там, где маска имеет значение .0., образ иконки не отображается; там, где маска имеет значение .1., маска рисуется. Имя образа может быть задано в одной из следующих форм:

@ИмяФайла файл должен содержать описание растрового рисунка в формате, соответствующем стандарту X11 или X10;
name имя образа типа bitmap, ранее созданного в приложении.
Если аргумент bitmap представляет собой пустую строку, отменяется использование ранее заданной маски (это эквивалентно заданию маски из одних единиц).
Если аргумент bitmap задан, команда возвращает пустую строку. В противном случае команда возвращает имя образа, используемого для маски для данного окна, либо пустую строку, если маска не задана.
wm iconname window ?newName?
Если аргумент newName задан, он передается менеджеру окон для использования в качестве имени иконки для окна. В этом случае команда возвращает пустую строку. Если аргумент newNameне задан, команда возвращает текущее имя иконки для окна; если имя иконки не задано, команда возвращает пустую строку (в этом случае менеджер окон использует в качестве имени иконки имя окна, заданное с помощью команды wmtitle).
wm iconposition window x y
Если аргументы x и y заданы, они передаются менеджеру окон и используются как подсказка при размещении иконки окна window. В этом случае команда возвращает пустую строку. Если x и y представляют собой пустые строки, команда отменяет ранее определенную подсказку для размещения иконки. Если аргументы x и y не заданы, команда возвращает текущее значение подсказки (или пустую строку, если она не задана).
wm iconwindow window pathName
Если аргумент pathName указан, он определяет имя окна, которое используется в качестве иконки для окна window: кодгда окно window свертывается, появляется окно pathName, которое используется в качестве иконки. Когда окно window разворачивается, окно pathName выводится с экрана. Если аргумент pathName представляет собой пустую строку, ранее определенное окно больше не используется как иконка.
Если аргумент pathName указан, команда возвращает пустую строку. В противном случае команда возвращает имя окна, ранее заданного в качестве иконки, или пустую строку, если ранее оно не было задано.
Нажатие на кнопку .Мыши. в окне-иконке не обрабатываются приложением, что позволяет обрабатывать эти события менеджеру окон.
Замечание. Не все менеджеры окон позволяют использовать Tk-окно в качестве иконки.
wm maxsize window width height
Если аргументы width и height заданы, они задают максимальный возможный размер окна. Если в окне определена сетка, размеры указываются в шагах сетки. В противном случае размеры указываются в пикселях. Менеджер окон не позволяет окну становиться больше, чем задано в команде.
Если аргументы width и height заданы, команда возвращает пустую строку, в противном случае она возвращает список, содержащий два элемента: текущие ограничения на размер окна. По умолчанию максимальные размеры окна равны размеру экрана. Если изменение размеров окна запрещено с помощью команды wm resizable, команда wmmaxsize не влияет на окно. Более подробно этот вопрос рассмотрен ниже (см. Управление геометрией.)

wm minsize window width height>

Если аргументы width и height заданы, они задают минимальный возможный размер окна. Если в окне определена сетка, размеры указываются в шагах сетки. В противном случае размеры указываются в пикселях. Менеджер окон не позволяет окну становиться меньше, чем задано в команде.
Если аргументы width и height заданы, команда возвращает пустую строку, в противном случае она возвращает список, содержащий два элемента: текущие ограничения на размер окна. По умолчанию минимальные размеры окна равны одному пикселю в каждом направлении. Если изменение размеров окна запрещено с помощью команды wm resizable, команда wm maxsize не влияет на окно. Более подробно этот вопрос рассмотрен ниже (см. Управление геометрией.).

wm overrideredirect window boolean

Если аргумент boolean задан, он должен быть булевой величиной. Его значение присваивается override-redirect флагу окна. Если аргумент не задан, команда возвращает .1. или .0., в зависимости от того, установлен ли флаг для window.
Установка флага приводит к тому, что окно не управляется менеджером окон. В частности, окно не будет заключено в декоративную рамку и пользователь не сможет изменять размеры и положение окна, используя стандартные механизмы менеджера окон.

wm positionfrom window who

Если аргумент who задан, он должен иметь одно из двух значений program или user (или произвольное сокращение от одного из них). Оно определяет, будет ли размещение окна определяться программой или пользователем. Многие менеджеры окон игнорируют запрошенное программой начальное размещение окна и требуют от пользователя разместить его вручную. Если задано значение user, менеджер окон не требует этого от пользователя. Если аргумент who задан как пустая строка, текущая установка отменяется.
Если аргумент who задан, команда возвращает пустую строку. В противном случае команда возвращает установленное ранее значение или пустую строку, если значение не было установлено. Большинство менеджеров окон считают, что если .источник. не задан, это то же самое, что program. Tk автоматически устанавливает значение user при выполнении команды wm geometry, если ранее не было установлено явно значение program.
wm protocol window name command
Эта команда используется для организации обработки сообщений (протоколов) менеджера окон, таких как WM_DELETE_WINDOW. Аргумент name, если он задан, должен быть именем элемента (атома) протокола менеджера окон. Если заданы оба аргумента name и command, команда command ассоциируется с протоколом name. Значение name добавляется к свойству окна WM_PROTOCOLS, чтобы указывать менеджеру окон, что приложение имеет обработчика соответствующего сообщения, и какая команда должна быть выполнена впоследствии, когда менеджер окон пошлет клиентской программе соответствующее сообщение. В этом случае команда возвращает пустую строку.
Если аргумент name задан, а command нет, будет возвращена команда, ассоциированная с данным протоколом или пустая строка, если такой команды нет. Если command определена как пустая строка, текущий обработчик соответствующего события будет отменен, а имя протокола будет удалено из свойства PROTOCOLS окна window. Команда возвратит пустую строку.
И наконец, если ни name, ни command не заданы, команда возвратит список протоколов, для которых заданы обработчики событий для данного окна.
Tk всегда определяет обработчик событий для протокола WM_DELETE_WINDOW, даже если он не был задан с помощью команды wm protocol. Если обработчик события не был задан явно, то, когда поступает сообщение WM_DELETE_WINDOW, Tk удаляет окно, для которого было получено это сообщение.
wm resizable window width height
Эта команда управляет возможностью пользователя интерактивно изменять размеры окна. Если аргументы width и height заданы, они должны быть булевыми величинами, определяющими, может ли пользователь изменять в интерактивном режиме ширину и высоту окна соответственно. Команда при этом возвращает пустую строку. Если аргументы width и height отсутствуют, команда возвращает список из двух элементов, принимающих значение .0. или .1. и указывающих, может ли пользователь изменять высоту и ширину окна соответственно. По умолчанию пользователь может изменять размеры окна в обоих направлениях.

Если изменение размеров окна пользователем запрещено, то либо сохраняются те размеры окна, которые были получены в результате последнего выполненного пользователем изменения размеров, либо размеры окна устанавливаются с помощью команды wm geometry. Если этих действий не было, используются размеры окна, определяемые размерами составляющих его виджетов.

wm sizefrom window ?who?
Если аргумент who задан, он должен иметь одно из двух значений program или user (или произвольное сокращение от одного из них). Оно определяет, будет ли размер окна определяться программой или пользователем. Многие менеджеры окон игнорируют запрошенный программой начальный размер окна и требуют от пользователя определить его размер вручную. Если задано значение user, менеджер окон не требует этого от пользователя. Если аргумент who задан как пустая строка, текущая установка отменяется.
Если аргумент who задан, команда возвращает пустую строку. В противном случае команда возвращает установленное ранее значение; если значение не было установлено, команда возвращает пустую строку. Большинство менеджеров окон считают, что если .источник. не задан, это то же самое, что program.
wm state window
Команда возвращает текущее состояние окна:
normal, iconic, withdrawn или icon. Разница между iconic и icon в том, что iconic используется для свернутого окна (например, с помощью команды wm iconify ), а icon для окна, которое используется в качестве иконки для другого окна (с помощью команды wm iconwindow).
wm title window string
Если аргумент string определен, он передается менеджеру окон для использования в качестве имени (титула) окна, которое менеджер окон высвечивает на рамке окна. В этом случае команда возвращает рустую строку. Если аргумент string не задан, команда возвращает ранее установленный заголовок. По умолчанию титул окна совпадает с его полным именем как виджета.
wm transient window master
Если аргумент master задан, команда передает менеджеру окон информацию о том, что окно window является временным окном (например, выпадающим меню), работающим под управлением master-окна (где master полное имя toplevel-окна). Некоторые менеджеры окон используют эту информацию для того, чтобы управлять таким окном специальным образом. Если аргумент master представляет собой пустую строку, окно перестает быть временным окном.
Если аргумент master задан, команда возвращает пустую строку. В противном случае она возвращает имя управляющего окна или пустую строку, если окно window не является временным.
wm withdraw window
При выполнении команды окно window удаляется с экрана. Информация о нем удаляется из менеджера окон. Если окно не присутствовало на экране ранее, оно не появится на экране при создании. Но не все менеджеры окон знают, как работать с такими окнами!
Замечание. Иногда оказывается необходимым удалить окно с помощью команды wm withdraw, а затем возвратить его обратно на экран (например, с помощью команды wm deiconify), чтобы менеджер окон учитывал некоторые его атрибуты, например, группу.

УПРАВЛЕНИЕ ГЕОМЕТРИЕЙ

По умолчанию toplevel-окна при появлении на экране имеют размеры, определяемые размерами составляющих его виджетов (.естественные. размеры). Если изменяются размеры или состав виджетов, то изменяется и размер toplevel-окна. Для toplevel-окна размеры, отличные от .естественных., могут быть заданы двумя способами. Первый пользователь может изменить размеры окна вручную, используя стандартные механизмы менеджера окон. Второй приложение может запросить изменение размеров окна с помощью команды wm geometry. Оба зти способа обрабатываются в Tk единообразно. Размеры окна изменяются на новые, отличные от .естественных.. Чтобы вернуть .естественные. размеры окна, нужно выполнить команду wm geometry с пустой строкой в качестве аргумента, задающего размеры и размещение окна.

Обычно размеры окна могут изменяться произвольно в диапазоне от 1 пикселя до размеров экрана. Однако, с помощью команд wm minsize и wm maxsize можно изменить область возможных размеров окна. Эти ограничения будут использоваться при всех способах изменения размеров окна, в том числе и при ручном изменении, и при изменении размеров и состава его виджетов, приводящем к изменению его .естественных. размеров. С помощью команды wm resizable можно полностью запретить изменение размеров окна каким-либо способом в одном или в обоих направлениях.

УПРАВЛЕНИЕ ОКНАМИ С СЕТКОЙ

Окна с сеткой используются, если один из виджетов окна имеет ограниченное множество .разумных. размеров. Например, в текстовом редакторе, где полосы прокрутки, меню и т. д. имеют фиксированный размер, а поле редактирования текста может содержать произвольное число строк или букв в строке. В этом случае желательно дать пользователю возможность устанавливать непосредственно число строк или букв в строке при изменении размеров окна как вручную, так и с помощью команды wm geometry. Как в случае с текстом, так и в других аналогичных, .разумным. является не всякий размер окна в пикселях, а только размеры, соответствующие целому числу строк или букв в строке.

Введение сетки обеспечивает механизм для реализации этих требований. Tk (и менеджер окон) предполагают существование сетки в окне, и что .разумными. являются только размеры, выраженные в целых шагах сетки, а не в произвольном числе пикселей. Обычно сетка устанавливается с помощью опции setGrid для соответствующего виджета. Она может также устанавливаться с помощью команды wm grid. В любом случае с помощью виджета или кода приложения определяются размеры окна в пикселях, соответствующие целым размерам в шагах сетки. Чтобы отменить сетку, нужно выполнить команду wm grid с пустой строкой, задающей сетку.

Если сетка задана, все определения размеров в командах wm minsize, wm maxsize и wm geometry считаются заданными в шагах сетки, а не в пикселях. Ручное изменение размеров окна также производится в целых шагах сетки.

ОШИБКИ

Как оказалось, большинство существующих менеджеров окон имеют некоторые ошибки, которые проявляются при выполнении команды wm. Например, некоторые изменения не производятся в окне, если оно активно. Окно должно быть выведено с экрана и возвращено обратно, чтобы изменения выполнились.

ПРИМЕР

wm geometry . 750x550+0+0 - устанавливает размер окна
wm title . Tcl/Tk Project Manager - заголовок окна
wm iconname . Tcl/Tk Project Manager - подпись для икнонки
wm protocol . wm_DELETE_WINDOW Quit - процедура выполняема по закрытии окна
wm overrideredirect . 0
wm positionfrom . user - установка позиции окна
wm resizable . 0 0 - установка атрибутов окна (в данном случае не изменяемое)