<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424490&amp;view=findpost&amp;p=3857722</guid>
        <pubDate>Sat, 15 Jan 2022 03:33:11 +0000</pubDate>
        <title>tkinter canvas map</title>
        <link>https://forum.sources.ru/index.php?showtopic=424490&amp;view=findpost&amp;p=3857722</link>
        <description><![CDATA[Seriy-Coder: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=424490&view=findpost&p=3855490'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pit&#045;Bul &#064; <time class="tag-quote__quoted-time" datetime="2021-12-02T16:38:52+03:00">02.12.21, 13:38</time></span><div class='quote '>Не нашел как силами tkinter canvas определить длину этих линий в пикселях для определения масштаба</div></div><br>
<br>
Тоесть &quot;определить длинну&quot;? Ты же сам будешь рисовать линии. <br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=424490&view=findpost&p=3855490'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Pit&#045;Bul &#064; <time class="tag-quote__quoted-time" datetime="2021-12-02T13:38:52+00:00">02.12.21, 13:38</time></span><div class='quote '>Как рисовать на tkinter canvas именно вторым слоем, чтобы можно было очищать маршрут, ну либо корректировать. Хотя тут наверное будут подсказывать подгружать картинку по новой для очищения плана, возможно, но может есть более изящное решение.</div></div><br>
<br>
Держи небольшой пример:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">from tkinter import *</div><div class="code_line">from tkinter import ttk</div><div class="code_line">import random as rnd</div><div class="code_line">&nbsp;</div><div class="code_line">class App(ttk.Frame):</div><div class="code_line">&nbsp;&nbsp; &nbsp;def __init__(self, master=None):</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;super().__init__(master)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;self.pack()</div><div class="code_line">&nbsp;</div><div class="code_line">map_w = 200</div><div class="code_line">map_h = 200</div><div class="code_line">map_bg = &#39;white&#39;</div><div class="code_line">&nbsp;</div><div class="code_line">myapp=None</div><div class="code_line">c_scr=None</div><div class="code_line"># map: array of &quot;objects&quot;</div><div class="code_line">map_=None</div><div class="code_line"># format of object:</div><div class="code_line"># types: line. other_attributes=x2, y2, color(black), width(1)</div><div class="code_line">#</div><div class="code_line"># [id, type, x, y, other_attributes]</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">def app_init():</div><div class="code_line">&nbsp;&nbsp;global myapp, c_scr, map_</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;#</div><div class="code_line">&nbsp;&nbsp;myapp = App()</div><div class="code_line">&nbsp;&nbsp;myapp.master.title(&quot;Test Canvas App&quot;)</div><div class="code_line">&nbsp;&nbsp;myapp.master.maxsize(map_w+100, map_h+100)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;c_scr = Canvas(myapp, width=map_w, height=map_h, bg=map_bg)</div><div class="code_line">&nbsp;&nbsp;map_ = []</div><div class="code_line">&nbsp;</div><div class="code_line">def event_quit(event):</div><div class="code_line">&nbsp;&nbsp;myapp.destroy()</div><div class="code_line">&nbsp;&nbsp;exit()</div><div class="code_line">&nbsp;</div><div class="code_line">def clear_map(event):</div><div class="code_line">&nbsp;&nbsp;map_.clear()</div><div class="code_line">&nbsp;&nbsp;c_scr.delete(&#39;GRAPH&#39;)</div><div class="code_line">&nbsp;</div><div class="code_line">def app_create_ui():</div><div class="code_line">&nbsp;&nbsp;btn_q = c_scr.create_rectangle(75, 180, 135, 198, fill=&#39;grey&#39;, tag=&#39;UI&#39;)</div><div class="code_line">&nbsp;&nbsp;btn_q_t=c_scr.create_text(120, 200, text=&quot;Exit&quot;,anchor=SE, fill=&quot;blue&quot;, tag=&#39;UI&#39;)</div><div class="code_line">&nbsp;&nbsp;c_scr.tag_bind(btn_q, &#39;&#60;Button-1&#62;&#39;, event_quit)</div><div class="code_line">&nbsp;&nbsp;c_scr.tag_bind(btn_q_t, &#39;&#60;Button-1&#62;&#39;, event_quit)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;btn_c = c_scr.create_rectangle(75, 160, 135, 178, fill=&#39;olive&#39;, tag=&#39;UI&#39;)</div><div class="code_line">&nbsp;&nbsp;btn_c_t=c_scr.create_text(120, 180, text=&quot;Clear&quot;,anchor=SE, fill=&quot;blue&quot;, tag=&#39;UI&#39;)</div><div class="code_line">&nbsp;&nbsp;c_scr.tag_bind(btn_c, &#39;&#60;Button-1&#62;&#39;, clear_map)</div><div class="code_line">&nbsp;&nbsp;c_scr.tag_bind(btn_c_t, &#39;&#60;Button-1&#62;&#39;, clear_map)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">def auto_fill_map(objects=9):</div><div class="code_line">&nbsp;&nbsp;global map_</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;for i in range (0, objects):</div><div class="code_line">&nbsp;&nbsp; &nbsp;# here I make random items on the map:</div><div class="code_line">&nbsp;&nbsp; &nbsp;x=rnd.randrange(0, map_w)</div><div class="code_line">&nbsp;&nbsp; &nbsp;y=rnd.randrange(0, map_h)</div><div class="code_line">&nbsp;&nbsp; &nbsp;x_=rnd.randrange(1, 25)</div><div class="code_line">&nbsp;&nbsp; &nbsp;y_=rnd.randrange(1, 25)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;newobj_id = c_scr.create_line(x, y, x_, y_, tag=&quot;GRAPH&quot;)</div><div class="code_line">&nbsp;&nbsp; &nbsp;newobj = [newobj_id, &#39;line&#39;, x, y, [x_, y_, &#39;black&#39;, 1]]</div><div class="code_line">&nbsp;&nbsp; &nbsp;map_.append(newobj)</div><div class="code_line">&nbsp;</div><div class="code_line">def move_z(obj):</div><div class="code_line">&nbsp;&nbsp;#c_scr.tag_lower(obj) </div><div class="code_line">&nbsp;&nbsp;#c_scr.tag_raise(obj)</div><div class="code_line">&nbsp;&nbsp;pass</div><div class="code_line">&nbsp;</div><div class="code_line"># c.pack()</div><div class="code_line">&nbsp;</div><div class="code_line"># c.create_line(10, 10, 190, 50)</div><div class="code_line">&nbsp;</div><div class="code_line"># c.create_line(100, 180, 100, 60, fill=&#39;green&#39;,</div><div class="code_line"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width=5, arrow=LAST, dash=(10,2),</div><div class="code_line"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; activefill=&#39;lightgreen&#39;,</div><div class="code_line"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arrowshape=&quot;10 20 10&quot;)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line"># def in_focus(event):</div><div class="code_line"># &nbsp; &nbsp; c_scr.itemconfig(rect, fill=&#39;green&#39;, width=2)</div><div class="code_line"># &nbsp; &nbsp; c_scr.coords(rect, 70, 70, 130, 130)</div><div class="code_line"># c_scr.bind(&#39;&#60;FocusIn&#62;&#39;, in_focus)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">def app_start():</div><div class="code_line">&nbsp;&nbsp;c_scr.pack()</div><div class="code_line">&nbsp;&nbsp;myapp.mainloop()</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">app_init()</div><div class="code_line">app_create_ui()</div><div class="code_line">auto_fill_map()</div><div class="code_line">app_start()</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Seriy-Coder</author>
        <category>Python</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=424490&amp;view=findpost&amp;p=3855490</guid>
        <pubDate>Thu, 02 Dec 2021 13:38:52 +0000</pubDate>
        <title>tkinter canvas map</title>
        <link>https://forum.sources.ru/index.php?showtopic=424490&amp;view=findpost&amp;p=3855490</link>
        <description><![CDATA[Pit-Bul: Доброго времени суток. Задача следующая, есть данные движения объекта по заданному помещению, есть план помещения в определенном масштабе. Требуется на этом плане отметить маршрут движения объекта. Пока думаю сделать все с помощью  tkinter canvas и рисовать цепочку коротких линий. Но сразу возник ряд вопросов:<br><br>1. Масштаб плана определяет 2 линии в углу плана, одна из которых 1 метр, вторая 10 метров. Не нашел как силами tkinter canvas определить длину этих линий в пикселях для определения масштаба. Еще план зумируется, то есть можно уменьшать (отдалять) и увеличивать (приближать) план.<br><br>2. Как рисовать на tkinter canvas именно вторым слоем, чтобы можно было очищать маршрут, ну либо корректировать. Хотя тут наверное будут подсказывать подгружать картинку по новой для очищения плана, возможно, но может есть более изящное решение.<br><br>Возможно я выбрал не верный инструментарий, в этом случае с удовольствием приму во внимание ваши мысли на этот счет.]]></description>
        <author>Pit-Bul</author>
        <category>Python</category>
      </item>
	
      </channel>
      </rss>
	