<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF129%3AR</id>
		<title>LXF129:R - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF129%3AR"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF129:R&amp;action=history"/>
		<updated>2026-05-13T00:16:42Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF129:R&amp;diff=15097&amp;oldid=prev</id>
		<title>2sash-kan в 16:43, 3 июля 2014</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF129:R&amp;diff=15097&amp;oldid=prev"/>
				<updated>2014-07-03T16:43:31Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 16:43, 3 июля 2014&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 142:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 142:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; &amp;gt; edge &amp;lt;- c(“top”,”right”,”bottom”,”left”)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; &amp;gt; edge &amp;lt;- c(“top”,”right”,”bottom”,”left”)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; &amp;gt; for ( i in 1:4 ) # Четыре кнопки&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; &amp;gt; for ( i in 1:4 ) # Четыре кнопки&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; + tkpack(buttons[[i]], side=edge[i],&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; + tkpack(buttons[[&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;nowiki /&amp;gt;&lt;/ins&gt;i]], side=edge[i],&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; + fill=”both”)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; + fill=”both”)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>2sash-kan</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF129:R&amp;diff=11681&amp;oldid=prev</id>
		<title>Crazy Rebel: /* ''Tcl/Tk'' */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF129:R&amp;diff=11681&amp;oldid=prev"/>
				<updated>2011-04-04T13:19:47Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;&amp;#039;&amp;#039;Tcl/Tk&amp;#039;&amp;#039;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 13:19, 4 апреля 2011&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 134:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 134:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Элементы графического интерфейса можно привязать к любой из сторон основного окна. Например, вот так:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Элементы графического интерфейса можно привязать к любой из сторон основного окна. Например, вот так:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|Содержание=[[Изображение:LXF129_64_2.jpg|&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;300px&lt;/del&gt;]] Наши четыре кнопки.|Ширина=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;300px&lt;/del&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|Содержание=[[Изображение:LXF129_64_2.jpg|&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;200px&lt;/ins&gt;]] Наши четыре кнопки.|Ширина=&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;200px&lt;/ins&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; &amp;gt; tkdestroy(tt) # Убираем предыдущий пример&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; &amp;gt; tkdestroy(tt) # Убираем предыдущий пример&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF129:R&amp;diff=11680&amp;oldid=prev</id>
		<title>Crazy Rebel: /* Ваше меню */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF129:R&amp;diff=11680&amp;oldid=prev"/>
				<updated>2011-04-04T13:19:18Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Ваше меню&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 13:19, 4 апреля 2011&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 314:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 314:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;===Ваше меню===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;===Ваше меню===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|Содержание=[[Изображение:LXF129_65_3.jpg|&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;200px&lt;/del&gt;]] Пунктир в верхней части меню намекает, что его можно «оторвать».|Ширина=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;200px&lt;/del&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|Содержание=[[Изображение:LXF129_65_3.jpg|&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;150px&lt;/ins&gt;]] Пунктир в верхней части меню намекает, что его можно «оторвать».|Ширина=&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;150px&lt;/ins&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Если наше приложение достаточно сложное, то ему, безусловно, понадобится меню. Меню в Tk тоже есть – это отдельный элемент. Можно использовать всплывающее меню, но чаще его размещают в основном окне в качестве полоски или кнопки «'''Пуск'''», или как меню, вложенное внутри главного меню приложения.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Если наше приложение достаточно сложное, то ему, безусловно, понадобится меню. Меню в Tk тоже есть – это отдельный элемент. Можно использовать всплывающее меню, но чаще его размещают в основном окне в качестве полоски или кнопки «'''Пуск'''», или как меню, вложенное внутри главного меню приложения.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF129:R&amp;diff=11679&amp;oldid=prev</id>
		<title>Crazy Rebel: /* Ваше меню */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF129:R&amp;diff=11679&amp;oldid=prev"/>
				<updated>2011-04-04T13:18:58Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Ваше меню&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 13:18, 4 апреля 2011&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 314:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 314:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;===Ваше меню===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;===Ваше меню===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|Содержание=[[Изображение:LXF129_65_3.jpg|&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;300px&lt;/del&gt;]] Пунктир в верхней части меню намекает, что его можно «оторвать».|Ширина=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;300px&lt;/del&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|Содержание=[[Изображение:LXF129_65_3.jpg|&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;200px&lt;/ins&gt;]] Пунктир в верхней части меню намекает, что его можно «оторвать».|Ширина=&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;200px&lt;/ins&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Если наше приложение достаточно сложное, то ему, безусловно, понадобится меню. Меню в Tk тоже есть – это отдельный элемент. Можно использовать всплывающее меню, но чаще его размещают в основном окне в качестве полоски или кнопки «'''Пуск'''», или как меню, вложенное внутри главного меню приложения.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Если наше приложение достаточно сложное, то ему, безусловно, понадобится меню. Меню в Tk тоже есть – это отдельный элемент. Можно использовать всплывающее меню, но чаще его размещают в основном окне в качестве полоски или кнопки «'''Пуск'''», или как меню, вложенное внутри главного меню приложения.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF129:R&amp;diff=11678&amp;oldid=prev</id>
		<title>Crazy Rebel: /* ''Tcl/Tk'' */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF129:R&amp;diff=11678&amp;oldid=prev"/>
				<updated>2011-04-04T13:18:38Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;&amp;#039;&amp;#039;Tcl/Tk&amp;#039;&amp;#039;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 13:18, 4 апреля 2011&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 158:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 158:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Следующий пример рекомендуется выполнить построчно, наблюдая за изменением вывода в основном окне:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Следующий пример рекомендуется выполнить построчно, наблюдая за изменением вывода в основном окне:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|Содержание=[[Изображение:&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;LXF128_64_1&lt;/del&gt;.jpg|300px]] Пример использования менеджера геометрии ''tkgrid''|Ширина=300px}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|Содержание=[[Изображение:&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;LXF129_64_1&lt;/ins&gt;.jpg|300px]] Пример использования менеджера геометрии ''tkgrid''|Ширина=300px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; &amp;gt; t2 &amp;lt;- tktoplevel()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; &amp;gt; t2 &amp;lt;- tktoplevel()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF129:R&amp;diff=11677&amp;oldid=prev</id>
		<title>Crazy Rebel: /* Немного текста */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF129:R&amp;diff=11677&amp;oldid=prev"/>
				<updated>2011-04-04T13:17:59Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Немного текста&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 13:17, 4 апреля 2011&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 273:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 273:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; &amp;gt; tkget(txt, “0.0”, “end”)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; &amp;gt; tkget(txt, “0.0”, “end”)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;Поскольку ''Tсl'' имеет дело со строками, то и передаём мы только строки. «Первая строка, первый символ» – это '''0.0''', а '''end''' – это, соответственно, конец текста. Если мы захотим получить текст в ''R ''разбитым на строки так же, как в текстовом окне, то нам надо конвертировать строку ''Tcl'' в вектор:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Поскольку ''Tсl'' имеет дело со строками, то и передаём мы только строки. «Первая строка, первый символ» – это '''0.0''', а '''end''' – это, соответственно, конец текста. Если мы захотим получить текст в ''R ''разбитым на строки так же, как в текстовом окне, то нам надо конвертировать строку ''Tcl'' в вектор:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; &amp;gt; strsplit(tkget(txt, “0.0”, “end”),”\n”)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160; &amp;gt; strsplit(tkget(txt, “0.0”, “end”),”\n”)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF129:R&amp;diff=11669&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF129:R&amp;diff=11669&amp;oldid=prev"/>
				<updated>2011-04-04T13:11:15Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: '''''R''''' Создайте для своих статистических приложений удобный графический интерфейс&lt;br /&gt;
&lt;br /&gt;
==''R'': GUI на примере==&lt;br /&gt;
&lt;br /&gt;
{{Цикл/R}}&lt;br /&gt;
&lt;br /&gt;
: Мы уже описывали доступные для ''R'' графические интерфейсы, а сегодня '''Сергей Петров''' и '''Евгений Балдин''' покажут, как создавать их самостоятельно.&lt;br /&gt;
&lt;br /&gt;
Отдавать команды компьютеру можно исключительно из командной строки ''R''. И наоборот, ''R Commander'' по зволяет практически всё делать мышью. Очевидно, что часто требуется нечто среднее между этими двумя «мирами». Назовём этот средний путь интерфейсом «наведи и щелкни». Он особенно эффективен, когда мы визуализируем обрабатываемые данные.&lt;br /&gt;
&lt;br /&gt;
Анализ данных часто сводится к написанию своей специализированной программы. Если данных действительно много, то программирование становится для исследователя неизбежной необходимостью. Невозможно предусмотреть всё многообразие данных, пока их не исследуешь, поэтому процесс анализа идёт параллельно с написанием всё более и более интеллектуальной системы для его проведения.&lt;br /&gt;
&lt;br /&gt;
Динамический графический интерфейс программы анализа должен быть прост, незатейлив и не отвлекать от самого главного, а именно – от собственно анализа данных. Он должен быть тесно интегрирован с возможностями командной строки. Этим требованиям в полной мере отвечает пакет ''rpanel''.&lt;br /&gt;
&lt;br /&gt;
===''rpanel''===&lt;br /&gt;
&lt;br /&gt;
''Rpanel'' – это крайне простая и одновременно высокоуровневая надстройка над ''Tcl/Tk''-расширением среды ''R''. Наравне с ''Perl'' и ''Python, Tcl'' является «классическим» скриптовым языком высокого уровня, который обычно используют совместно с кроссплатформенной библиотекой графических элементов ''Tk''. Многие языки программирования, и ''R'' в том числе, применяют ''Tk'' для построения простых графических интерфейсов.&lt;br /&gt;
&lt;br /&gt;
Если пакет ''rpanel'' отсутствует в системе, то скачать и установить его можно с помощью команды&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; install.packages(“rpanel”)&lt;br /&gt;
&lt;br /&gt;
После этого загружаем саму библиотеку:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; library(rpanel)&lt;br /&gt;
&lt;br /&gt;
Логика использования пакета довольно проста:&lt;br /&gt;
# С помощью функции '''rp.control''' нужно создать объект '''panel''' и объявить в нём нужные нам переменные;&lt;br /&gt;
# Далее необходимо «населить» объект '''panel''' различными элементами графического интерфейса (ползунками, кнопками, картинками и т. д.) и связанными с ними переменными;&lt;br /&gt;
# В самом конце требуется определить функцию, которая будет выполняться в ответ на взаимодействие пользователя с графическим интерфейсом.&lt;br /&gt;
&lt;br /&gt;
Разберём простейший пример, в котором функция выводит на экран одно из двух: или гистограмму полученных данных, или боксплот («ящик-с-усами»), в зависимости от значения, выбранного в элементе '''rp.radiogroup''' (радиокнопке).&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF129_62_1.jpg|300px]] Пример простого переключателя.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Объявим объект '''panel''' и данные, которые будем отображать:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; panel &amp;lt;- rp.control(x=rnorm(50))&lt;br /&gt;
&lt;br /&gt;
Здесь мы «исследуем» '''x''', вектор данных, имеющих гауссовское распределение. Далее, поместим в '''panel''' переключатель '''rp.radiogroup''' и свяжем его с переменной '''plot.type''' и функцией '''hist.or.boxp''':&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; rp.radiogroup(panel, # сам объект&lt;br /&gt;
 + plot.type, # переменная&lt;br /&gt;
 + c(“histogram”, “boxplot”), # значения переключателя&lt;br /&gt;
 + title=”Plot type”, # название переключателя&lt;br /&gt;
 + action = hist.or.boxp) # пользовательская функция&lt;br /&gt;
&lt;br /&gt;
Наконец, объявим функцию, которая будет выполнятся в ответ на взаимодействие пользователя с переключателем:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; hist.or.boxp &amp;lt;- function(panel) {&lt;br /&gt;
 + if (panel$plot.type == “histogram”)&lt;br /&gt;
 + hist(panel$x)&lt;br /&gt;
 + else&lt;br /&gt;
 + boxplot(panel$x)&lt;br /&gt;
 + panel&lt;br /&gt;
 + }&lt;br /&gt;
&lt;br /&gt;
Доступ к переменным внутри объекта '''panel''' производится путём обращения вида '''panel$имя_переменной'''.&lt;br /&gt;
&lt;br /&gt;
Теперь всё готово. У нас есть готовая панель с переключателем, который в зависимости от выбора показывает либо гистограмму, либо боксплот.&lt;br /&gt;
&lt;br /&gt;
При желании можно «вмонтировать» график прямо в панель как один из элементов графического интерфейса. Для этого придётся воспользоваться командами '''rp.tkrplot''' и '''rp.tkrreplot''' из пакета ''tkrplot''. Перед их добавлением необходимо убедиться, что установлены системные пакеты ''tk-dev'' и ''tcl-dev'':&lt;br /&gt;
&lt;br /&gt;
 =&amp;gt; sudo aptitude install tk-dev tcl-dev&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF129_63_1.jpg|300px]] Ползунок и график в роли элементов пользовательского интерфейса.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Затем, как обычно, устанавливаем и загружаем сам пакет:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; install.packages(“tkrplot”)&lt;br /&gt;
 &amp;gt; library(tkrplot)&lt;br /&gt;
&lt;br /&gt;
Открываем панель '''rpplot''' и объявляем переменную '''h''':&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; rpplot &amp;lt;- rp.control(title = “Демонстрация rp.tkrplot”, + h = 1)&lt;br /&gt;
&lt;br /&gt;
Помещаем на панели '''rpplot''' график '''tkrp''':&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; rp.tkrplot(rpplot,&lt;br /&gt;
 + tkrp,&lt;br /&gt;
 + function(panel) plot(1:20,(1:20)^panel$h))&lt;br /&gt;
&lt;br /&gt;
В зависимости от значения параметра '''h''' на графике отображается соответствующая степенная функция. Далее, надо определить пользовательскую функцию для перерисовки графика:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; redraw &amp;lt;- function(panel) {&lt;br /&gt;
 + rp.tkrreplot(panel, tkrp)&lt;br /&gt;
 + }&lt;br /&gt;
&lt;br /&gt;
Для динамического изменения параметра '''h''' добавим в панель '''rpplot''' ползунок и свяжем его с пользовательской функцией '''redraw''':&lt;br /&gt;
&lt;br /&gt;
 # Помещаем на панель ползунок&lt;br /&gt;
 &amp;gt; rp.slider(rpplot, # панель&lt;br /&gt;
 + h, # переменная ползунка&lt;br /&gt;
 + action = redraw, # пользовательская функция&lt;br /&gt;
 + from = 0.05, to = 2.00, # параметры ползунка&lt;br /&gt;
 + resolution = 0.05,&lt;br /&gt;
 + title=”степень”) # название ползунка&lt;br /&gt;
 &lt;br /&gt;
===''Tcl/Tk''===&lt;br /&gt;
&lt;br /&gt;
Если возможностей ''rpanel'' не хватает, то можно спуститься уровнем ниже и обратиться напрямую к ''Tcl/Tk''. Нужный пакет так и называется – ''tcltk''.&lt;br /&gt;
&lt;br /&gt;
Инструментарий ''Tk'' предоставляет богатый набор элементов пользовательского интерфейса. К ним относятся окна редактирования текста, полосы прокрутки, поля ввода, кнопки, метки, списки и рисунки. Всё это можно комбинировать и получать сложный графический интерфейс.&lt;br /&gt;
&lt;br /&gt;
Простейший пример программы «Здравствуй, мир!» с использованием ''Tk'' выглядит так:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; library(tcltk) # Загружаем пакет Tcl/Tk&lt;br /&gt;
 &amp;gt; tt &amp;lt;- tktoplevel() # Объявляем контейнер&lt;br /&gt;
 # Объявляем метку&lt;br /&gt;
 &amp;gt; lbl &amp;lt;- tklabel(tt,text=”Здравствуй, мир!”)&lt;br /&gt;
 &amp;gt; tkpack(lbl) # Размещаем метку в контейнере&lt;br /&gt;
&lt;br /&gt;
В результате выполнения этого кода на экран будет выведено окно с популярной надписью «Здравствуй, мир!». Картинку этого шедевра программистского искусства мы не предоставляем, так как она достаточно банальна. Выполните пример самостоятельно – он не сложен.&lt;br /&gt;
&lt;br /&gt;
Схема построения графического интерфейса с ''Tk'' всегда одинакова: объявляется контейнер, в котором с помощью менеджера геометрии ('''tkpack''') размещаются дочерние виджеты.&lt;br /&gt;
&lt;br /&gt;
В контейнер можно добавить сколько угодно графических элементов. Процесс построения сложного приложения заключается в комбинировании элементарных блоков. Например, добавим в наше окно кнопку «Выполнить!»:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; but &amp;lt;- tkbutton(tt, text=”Выполнить!”)&lt;br /&gt;
 &amp;gt; tkpack(but)&lt;br /&gt;
&lt;br /&gt;
На кнопку уже можно нажимать, хотя никаких действий с ней пока не связано.&lt;br /&gt;
&lt;br /&gt;
 Окно контейнера, в котором выведен наш пример, называется «1» (значение по умолчанию). Изменим это:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; tktitle(tt) &amp;lt;- “Моё окно”&lt;br /&gt;
&lt;br /&gt;
В ''Tcl/Tk'' доступны три менеджера геометрии. Простейший из них, ''placer'', почти никогда не применяется. Более популярны оставшиеся два: ''packer'' и ''grid''. У ''packer'' есть два параметра: «порядок» и «направление».&lt;br /&gt;
&lt;br /&gt;
Если попробовать изменить мышью размеры окна предыдущего примера, вы увидите, что виджеты располагаются по центру окна у его верхней границы. Если начать уменьшать размер окна по вертикали, сначала сожмётся и исчезнет кнопка «'''Выполнить!'''», а потом начнёт изменяться надпись «Здравствуй, мир!». Попытки ручной коррекции размеров окна приводят к ещё одному эффекту: теперь оно не будет автоматически корректировать свои размеры при размещении в нем новых элементов. Восстановить автоматическую подгонку размеров окна можно, выполнив команду:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; tkwm.geometry(tt,””)&lt;br /&gt;
&lt;br /&gt;
Элементы графического интерфейса можно привязать к любой из сторон основного окна. Например, вот так:&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF129_64_2.jpg|300px]] Наши четыре кнопки.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; tkdestroy(tt) # Убираем предыдущий пример&lt;br /&gt;
 &amp;gt; tt &amp;lt;- tktoplevel()&lt;br /&gt;
 # Английские названия используются и как имена кнопок,&lt;br /&gt;
 # и как параметры&lt;br /&gt;
 &amp;gt; edge &amp;lt;- c(“top”,”right”,”bottom”,”left”)&lt;br /&gt;
 &amp;gt; for ( i in 1:4 ) # Четыре кнопки&lt;br /&gt;
 + tkpack(buttons[[i]], side=edge[i],&lt;br /&gt;
 + fill=”both”)&lt;br /&gt;
&lt;br /&gt;
При этом виджет занимает достаточную для своего расположения полосу, параллельную стороне привязки. Указанный параметр '''fill''' заставляет элемент занять полосу целиком. Аналогично, если указать параметр '''expand=TRUE''', то полоса захватит всё свободное место.&lt;br /&gt;
&lt;br /&gt;
Когда размещаемый графический элемент интерфейса не занимает полосу целиком, его можно «заякорить», подав «морские» команды вида «'''n'''» (nord – север или верх основного окна) или «'''sw'''» (зюйд-вест или внизу слева).&lt;br /&gt;
&lt;br /&gt;
Если нам, к примеру, понадобится разместить в основном окне область ввода текста с полосой прокрутки, то мы:&lt;br /&gt;
# Добавляем полосе прокрутки свойство '''fill=«y»''' (растягиваться по вертикали);&lt;br /&gt;
# Добавляем области ввода текста '''fill=«both»''' и '''expand=TRUE''', что бы она заняла все свободное пространство;&lt;br /&gt;
# Первой в основное окно помещаем полосу прокрутки, а потом область ввода текста, чтобы полоса прокрутки не сокращалась при изменении размеров окна пользователем.&lt;br /&gt;
&lt;br /&gt;
Если же вы задумались, как объединить ряд кнопок и область ввода текста, то нет ничего проще: надо всего лишь включить кнопки во фрейм. Каждый фрейм – это контейнер со своим собственным менеджером геометрии. Гибкость в размещении виджетов этими средствами достигается весьма изрядная. Однако иногда такой способ требует от пользователя изощрённых подходов. Например, достаточно трудно выровнять ряды кнопок одновременно и по вертикали, и по горизонтали. В случае, если вас замучила именно эта проблема, на помощь придет менеджер геометрии '''grid'''. Он размещает графические элементы интерфейса стройными рядами и колоннами.&lt;br /&gt;
&lt;br /&gt;
Следующий пример рекомендуется выполнить построчно, наблюдая за изменением вывода в основном окне:&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF128_64_1.jpg|300px]] Пример использования менеджера геометрии ''tkgrid''|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; t2 &amp;lt;- tktoplevel()&lt;br /&gt;
 &amp;gt; heading &amp;lt;- tklabel(t2, text=”Анкета”)&lt;br /&gt;
 &amp;gt; l.name &amp;lt;- tklabel(t2, text=”Ф.И.О.”)&lt;br /&gt;
 &amp;gt; l.age &amp;lt;- tklabel(t2, text=”Возраст”)&lt;br /&gt;
 &amp;gt; e.name &amp;lt;- tkentry(t2, width=30)&lt;br /&gt;
 &amp;gt; e.age &amp;lt;- tkentry(t2, width=3)&lt;br /&gt;
 &amp;gt; tkgrid(heading, columnspan=2)&lt;br /&gt;
 &amp;gt; tkgrid(l.name, e.name)&lt;br /&gt;
 &amp;gt; tkgrid(l.age, e.age)&lt;br /&gt;
 &amp;gt; tkgrid.configure(e.name, e.age, sticky=”w”)&lt;br /&gt;
 &amp;gt; tkgrid.configure(l.name, l.age, sticky=”e”)&lt;br /&gt;
&lt;br /&gt;
===Обратные вызовы===&lt;br /&gt;
&lt;br /&gt;
С таким достаточно приличным и доставшимся «малой кровью» графическим интерфейсом уже хочется общаться. А именно: получать от него данные и отправлять в него результаты обработки. Для этого есть два основных способа: «управляющие переменные» и «обратные вызовы» [callbacks].&lt;br /&gt;
&lt;br /&gt;
Для создания управляющей переменной ''Tcl'' служит функция '''tclVar()''', возвращающая объект класса '''tclVar'''. На стороне ''Tcl'' созданные переменные будут названы автоматически, и в обычной ситуации беспокоится о задании какого-то специального имени необходимости нет. Получить значение созданной переменной ''Tcl'' можно с помощью функции '''tclvalue()'''.&lt;br /&gt;
&lt;br /&gt;
Чтобы поместить в созданную переменную содержимое, не столкнувшись при этом с проблемами кавычек и других символов, имеющих в строках ''Tcl'' служебное значение, следует задействовав функцию '''tclObj()''':&lt;br /&gt;
&lt;br /&gt;
 # Создаем в R переменную foo&lt;br /&gt;
 &amp;gt; foo &amp;lt;- tclVar()&lt;br /&gt;
 # Заполняем foo символами&lt;br /&gt;
 &amp;gt; tclObj(foo) &amp;lt;- c(pi,exp(1))&lt;br /&gt;
 # Выводим значение foo&lt;br /&gt;
 &amp;gt; tclvalue(foo)&lt;br /&gt;
 [1] “3.141592653589793 2.718281828459045”&lt;br /&gt;
 # Разбираем строку на символьные значения&lt;br /&gt;
 &amp;gt; as.character(tclObj(foo))&lt;br /&gt;
 [1] “3.141592653589793” “2.718281828459045”&lt;br /&gt;
 # Разбираем строку на вещественные значения&lt;br /&gt;
 &amp;gt; as.double(tclObj(foo))&lt;br /&gt;
 [1] 3.141593 2.718282&lt;br /&gt;
 # Чего в строке нет, того нет&lt;br /&gt;
 &amp;gt; as.integer(tclObj(foo))&lt;br /&gt;
 [1] NA NA&lt;br /&gt;
 # Округляем до целых самостоятельно.&lt;br /&gt;
 &amp;gt; round(as.double(tclObj(foo)))&lt;br /&gt;
 [1] 3 3&lt;br /&gt;
&lt;br /&gt;
Доступ через '''tclObj()''' экономит значительные усилия. Например, вот так выглядит стандартная подготовка списка названий месяцев:&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF129_65_1.jpg|200px]] Так выглядит простой список месяцев [[Изображение:LXF129_65_2.jpg|200px]] А так — список месяцев с возможностью множественного выбора|Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
 # Имена месяцев в представлении R&lt;br /&gt;
 &amp;gt; month.name&lt;br /&gt;
 [1] “January” “February” “March” “April”&lt;br /&gt;
 [5] “May” “June” “July” “August”&lt;br /&gt;
 [9] “September” “October” “November” “December”&lt;br /&gt;
 # Теперь строка, пригодная для экспорта в Tcl&lt;br /&gt;
 &amp;gt; paste(month.name, collapse=” “)&lt;br /&gt;
 [1] “January February March April May June July&lt;br /&gt;
 + August September October November December”&lt;br /&gt;
&lt;br /&gt;
Она заменяется достаточно простым выражением:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; mylist &amp;lt;- tclVar()&lt;br /&gt;
 &amp;gt; tclObj(mylist) &amp;lt;- month.name&lt;br /&gt;
 &amp;gt; tclObj(mylist)&lt;br /&gt;
 &amp;lt;Tcl&amp;gt; January February March April May June July&lt;br /&gt;
 + August September October November December&lt;br /&gt;
&lt;br /&gt;
Имея на руках переменную ''Tcl'', общаться с созданным графическим интерфейсом очень просто. Построим форму со списком названий месяцев:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; tkpack(lb &amp;lt;- tklistbox(tt &amp;lt;- tktoplevel(), &lt;br /&gt;
 + listvariable = mylist))&lt;br /&gt;
&lt;br /&gt;
В любой момент можно узнать, какой месяц был выбран пользователем. При этом надо помнить, что индексы в ''Tcl'' начинаются с 0:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; as.character(tclObj(mylist))[as.integer(tkcurselection(lb))+1]&lt;br /&gt;
 [1] “July”&lt;br /&gt;
&lt;br /&gt;
Значения, возвращаемые из ''Tcl''-вызовов, также являются объектами '''tclObj'''. Например, мы можем включить в окне с нашим построенным списком месяцев режим множественного выбора:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; tkconfigure(lb, selectmode=”multiple”)&lt;br /&gt;
&lt;br /&gt;
Выбрав нужные позиции списка, мы легко получаем их в виде номеров строк:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; as.integer(tkcurselection(lb))&lt;br /&gt;
 [1] 1 3 5&lt;br /&gt;
&lt;br /&gt;
Теперь попробуем привязать к кнопке какое-либо действие, например, пусть она сообщает о своем нажатии в ''R'', и меняет надпись:&lt;br /&gt;
&lt;br /&gt;
 # Создаём основное окно&lt;br /&gt;
 &amp;gt; t &amp;lt;- tktoplevel()&lt;br /&gt;
 # Создаем кнопку&lt;br /&gt;
 &amp;gt; b &amp;lt;- tkbutton(t, text = “Не жми на меня!”)&lt;br /&gt;
 # Размещаем её в основном окне&lt;br /&gt;
 &amp;gt; tkpack(b)&lt;br /&gt;
 # Объявляем функцию кнопки&lt;br /&gt;
 &amp;gt; change.text &amp;lt;- function() {&lt;br /&gt;
 + cat(“ОГО!\n”)&lt;br /&gt;
 + tkconfigure(b, text = “Говорю тебе: не жми на меня!”)&lt;br /&gt;
 + }&lt;br /&gt;
 # Прикрепляем функцию к кнопке&lt;br /&gt;
 &amp;gt; tkconfigure(b, command = change.text)&lt;br /&gt;
&lt;br /&gt;
Теперь кнопка реагирует на нажатие: при каждом щелчке в консоли появляются восклицания «ОГО!» и меняется метка. Это простой пример – попробуйте его в динамике.&lt;br /&gt;
&lt;br /&gt;
Кнопку для краткости можно сразу объявить с нужной нам функцией:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; b &amp;lt;- tkbutton(t, text=”Не жми на меня!”,&lt;br /&gt;
 + command=expression(cat(“ОГО!\n”),&lt;br /&gt;
 + tkconfigure(b, text = “Говорю тебе: не жми на меня!”)))&lt;br /&gt;
&lt;br /&gt;
===Немного текста===&lt;br /&gt;
&lt;br /&gt;
Каждый из элементов графического интерфейса ''Tk'' имеет массу полезных применений. Например, окно для ввода текста представляет собой практически готовый текстовый редактор. В нём можно вводить и править текст, перемещаться по нему клавишами курсора, выделять куски текста для копирования или вставки.&lt;br /&gt;
&lt;br /&gt;
Чтобы получить текст из окна, надо выполнить команду&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; tkget(txt, “0.0”, “end”)&lt;br /&gt;
&lt;br /&gt;
 Поскольку ''Tсl'' имеет дело со строками, то и передаём мы только строки. «Первая строка, первый символ» – это '''0.0''', а '''end''' – это, соответственно, конец текста. Если мы захотим получить текст в ''R ''разбитым на строки так же, как в текстовом окне, то нам надо конвертировать строку ''Tcl'' в вектор:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; strsplit(tkget(txt, “0.0”, “end”),”\n”)&lt;br /&gt;
&lt;br /&gt;
Похожим способом можно получить выделение текста в окне:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; X &amp;lt;- tkget(txt, “sel.first”, “sel.last”)&lt;br /&gt;
&lt;br /&gt;
Здесь нам уже не обойтись без обработки ошибок, а то вдруг выделение текста не было сделано? Проверить это просто, путём сравнения с пустой строкой:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; tktag.ranges(txt, “sel”) != “”&lt;br /&gt;
&lt;br /&gt;
Можно получить информацию и о нажатии кнопки мыши, например, узнать координаты указателя и оставить текстовый курсор на месте:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; tkbind(txt, “&amp;lt;Control-Button-1&amp;gt;”,&lt;br /&gt;
 + expression(function(x,y) cat(x,y,”\n”),&lt;br /&gt;
 + break))&lt;br /&gt;
&lt;br /&gt;
Чтобы дописать какую-либо строку в конец текста, расположенного в окне, можно использовать такую конструкцию:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; tkinsert(txt, “end”, # Добавляем в конец текста&lt;br /&gt;
 string) # Строка, которую добавляем&lt;br /&gt;
&lt;br /&gt;
Естественно, если мы хотим передать в ''Tcl'' несколько строк сразу, понадобится объединить их, например, таким способом:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; tkinsert(txt, “end”,&lt;br /&gt;
 paste(deparse(ls), collapse=”\n”))&lt;br /&gt;
&lt;br /&gt;
Если нам надо переместить текстовый курсор в определенное место окна, то мы можем воспользоваться сочетанием:&lt;br /&gt;
&lt;br /&gt;
 # Переместить курсор в начало первой строки&lt;br /&gt;
 &amp;gt; tkmark.set(txt, “insert”, “0.0”)&lt;br /&gt;
 # Сделать видимой область с курсором&lt;br /&gt;
 &amp;gt; tksee(txt, “insert”)&lt;br /&gt;
&lt;br /&gt;
Мы также можем контролировать, куда будет смещаться вставляемый текст, если ему не хватает места. По умолчанию он вставляется перед выделением, но это легко изменить:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; tkmark.gravity(txt, “insert”, “left”)&lt;br /&gt;
&lt;br /&gt;
===Ваше меню===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF129_65_3.jpg|300px]] Пунктир в верхней части меню намекает, что его можно «оторвать».|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Если наше приложение достаточно сложное, то ему, безусловно, понадобится меню. Меню в Tk тоже есть – это отдельный элемент. Можно использовать всплывающее меню, но чаще его размещают в основном окне в качестве полоски или кнопки «'''Пуск'''», или как меню, вложенное внутри главного меню приложения.&lt;br /&gt;
&lt;br /&gt;
Наиболее практично создавать меню по шагам. Сначала нужно объявить его командой '''tkmenu''', затем наполнить элементами с помощью '''tkadd'''. Это позволит легко воспользоваться многочисленными параметрами команд создания элементов меню.&lt;br /&gt;
&lt;br /&gt;
Существует множество разновидностей элементов меню. Это эквивалентные уже знакомым нам кнопкам '''command entry'''. Вложенное меню получают, вставляя '''Cascade entries.Checkbutton''' и '''radiobutton''' позволяют реализовывать различные варианты выбора параметров. Есть и доступ к элементам, организующим содержимое меню: это '''separators''', отделяющие элементы меню визуально друг от друга, и '''tear-offs''', позволяющие откреплять меню от родительского и делать его плавающим.&lt;br /&gt;
&lt;br /&gt;
Чтобы не быть голословными, создадим кнопку меню с тремя '''radiobutton''':&lt;br /&gt;
 # Объявляем переменную изменяемую из меню&lt;br /&gt;
 &amp;gt; color &amp;lt;- tclVar&lt;br /&gt;
 #и её значение по умолчанию&lt;br /&gt;
 &amp;gt; color&amp;lt;-”красный”&lt;br /&gt;
 &amp;gt; tt &amp;lt;- tktoplevel()&lt;br /&gt;
 # Размещаем кнопку меню&lt;br /&gt;
 &amp;gt; tkpack(mb &amp;lt;- tkmenubutton(tt, text=”Цвет”))&lt;br /&gt;
 # Объявляем вложенное меню&lt;br /&gt;
 &amp;gt; m &amp;lt;- tkmenu(mb)&lt;br /&gt;
 # Присоединяем вложенное меню к кнопке&lt;br /&gt;
 &amp;gt; tkconfigure(mb,menu=m)&lt;br /&gt;
 # Создаём элементы меню&lt;br /&gt;
 &amp;gt; for ( i in c(“красный”, “синий”, “зелёный”))&lt;br /&gt;
 tkadd(m, “radio”, label=i, variable=color, value=i)&lt;br /&gt;
&lt;br /&gt;
Узнать, какой из вариантов меню был выбран пользователем, можно с помощью функции&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; tclvalue(color)&lt;br /&gt;
 [1] “красный”&lt;br /&gt;
&lt;br /&gt;
===Ваше слово===&lt;br /&gt;
&lt;br /&gt;
Теперь мы во всеоружии, то есть можем не просто наслаждаться высокопродуктивной обработкой данных в ''R'' сами, но и сделать свои наработки доступными для не столь искушённых в ''R'' окружающих.&lt;br /&gt;
&lt;br /&gt;
К сожалению, нет в мире совершенства. Вдруг нам понадобится сделать наше предложение доступным через корпоративный web-сервер? Или нам не нравится внешний вид ''Tk''? Если вы еще не привыкли к тому, что в'' R'', как в Греции, есть всё, то вот оно – решение: ''gWidgets''.&lt;br /&gt;
&lt;br /&gt;
Вместо того, чтобы опускаться вглубь конкретной библиотеки графического интерфейса, можно просто сделать свое приложение библиотеко-независимым. Но это тема для отдельного рассказа.&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>