Latest posts on Помогите новичку разобраться с компоновкой виджетов в окне Tkinter topichttps://python.su/forum/topic/41542/2022-05-15T10:40:04+03:00Общий :: GUI :: Помогите новичку разобраться с компоновкой виджетов в окне Tkinter
2022-05-15T10:40:04+03:00Pluto221870Т.е. для каждого виджета свой фрейм?<br/>Всё равно не совсем соображаю, что именно влияет на позиционирование. Но, таки, будучи каждый в своём фрейме, виджеты выстроились так как мне надо.<br/><br/>Спасибо.
Общий :: GUI :: Помогите новичку разобраться с компоновкой виджетов в окне Tkinter
2022-05-14T20:23:39+03:00xam1816221859<div class="code"><pre>
<span class="kn">import</span> <span class="nn">tkinter</span> <span class="kn">as</span> <span class="nn">tk</span>
<span class="k">class</span> <span class="nc">Window_main</span><span class="p">(</span><span class="n">tk</span><span class="o">.</span><span class="n">Tk</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">tk</span><span class="o">.</span><span class="n">Tk</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Окно"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">padX</span> <span class="o">=</span> <span class="mi">2</span>
<span class="bp">self</span><span class="o">.</span><span class="n">padY</span> <span class="o">=</span> <span class="mi">2</span>
<span class="bp">self</span><span class="o">.</span><span class="n">frame1</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">Frame</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">frame1</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">fill</span><span class="o">=</span><span class="s2">"both"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">btn</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="n">master</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">frame1</span><span class="p">,</span>
<span class="n">text</span><span class="o">=</span><span class="s2">"Кнопка"</span><span class="p">,</span>
<span class="n">font</span><span class="o">=</span><span class="p">(</span><span class="s2">""</span><span class="p">,</span> <span class="s2">"12"</span><span class="p">,</span> <span class="s2">"bold"</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">btn</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">side</span><span class="o">=</span><span class="s2">"left"</span><span class="p">,</span> <span class="n">anchor</span><span class="o">=</span><span class="s2">"n"</span><span class="p">,</span> <span class="n">padx</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">padX</span><span class="p">,</span> <span class="n">pady</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">padY</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">frame2</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">Frame</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">frame2</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">fill</span><span class="o">=</span><span class="s1">'both'</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">lbl</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">Label</span><span class="p">(</span><span class="n">master</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">frame2</span><span class="p">,</span>
<span class="n">text</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span>
<span class="n">font</span><span class="o">=</span><span class="s2">"12"</span><span class="p">,</span>
<span class="n">relief</span><span class="o">=</span><span class="n">tk</span><span class="o">.</span><span class="n">SUNKEN</span><span class="p">,</span>
<span class="n">width</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span>
<span class="n">anchor</span><span class="o">=</span><span class="s2">"w"</span><span class="p">,</span>
<span class="n">bg</span><span class="o">=</span><span class="s2">"white"</span><span class="p">,</span>
<span class="n">bd</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">lbl</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">anchor</span><span class="o">=</span><span class="s2">"n"</span><span class="p">,</span> <span class="n">fill</span><span class="o">=</span><span class="n">tk</span><span class="o">.</span><span class="n">X</span><span class="p">,</span> <span class="n">expand</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">padx</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">padX</span><span class="p">,</span> <span class="n">pady</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">padY</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">frame3</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">Frame</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">frame3</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">fill</span><span class="o">=</span><span class="s1">'both'</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">txt</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">Text</span><span class="p">(</span><span class="n">master</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">frame3</span><span class="p">,</span>
<span class="n">font</span><span class="o">=</span><span class="p">(</span><span class="s2">"Courier New"</span><span class="p">,</span> <span class="s2">"12"</span><span class="p">),</span>
<span class="n">relief</span><span class="o">=</span><span class="n">tk</span><span class="o">.</span><span class="n">SUNKEN</span><span class="p">,</span>
<span class="n">width</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span>
<span class="n">height</span><span class="o">=</span><span class="mi">11</span><span class="p">,</span>
<span class="n">bg</span><span class="o">=</span><span class="s2">"white"</span><span class="p">,</span>
<span class="n">bd</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">txt</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="s2">"<Key>"</span><span class="p">,</span> <span class="k">lambda</span> <span class="n">a</span><span class="p">:</span> <span class="s2">"break"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">txt</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">anchor</span><span class="o">=</span><span class="s2">"n"</span><span class="p">,</span> <span class="n">fill</span><span class="o">=</span><span class="n">tk</span><span class="o">.</span><span class="n">X</span><span class="p">,</span> <span class="n">expand</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">padx</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">padX</span><span class="p">,</span> <span class="n">pady</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">padY</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">btn2</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="n">master</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
<span class="n">font</span><span class="o">=</span><span class="p">(</span><span class="s2">""</span><span class="p">,</span> <span class="s2">"12"</span><span class="p">,</span> <span class="s2">"bold"</span><span class="p">),</span>
<span class="n">text</span><span class="o">=</span><span class="s2">"Кнопка2"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">btn2</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">side</span><span class="o">=</span><span class="s2">"left"</span><span class="p">,</span> <span class="n">anchor</span><span class="o">=</span><span class="s2">"n"</span><span class="p">,</span> <span class="n">padx</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">padX</span><span class="p">,</span> <span class="n">pady</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">padY</span><span class="p">)</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span>
<span class="n">m</span> <span class="o">=</span> <span class="n">Window_main</span><span class="p">()</span>
<span class="n">m</span><span class="o">.</span><span class="n">mainloop</span><span class="p">()</span>
</pre></div>
Общий :: GUI :: Помогите новичку разобраться с компоновкой виджетов в окне Tkinter
2022-05-14T13:30:35+03:00Pluto221846Мне нужно чтобы при растягивании окна все виджеты оставались на своих местах, лишь виджеты lbl и txt должны расширяться по горизонтали. Я заставил виджет lbl не съезжать со своего места, но виджет txt упорно лезет центрироваться по вертикали. А кнопка btn2 тащится за нижнем краем окна. См. вложение.<br/><br/>Как их всех заставить подчиняться и сидеть на своих местах смирно? Попиксельное позиционирование, пожалуйста, не предлагайте.<br/><br/><div class="code"><pre> <span class="kn">import</span> <span class="nn">tkinter</span> <span class="kn">as</span> <span class="nn">tk</span>
<span class="k">class</span> <span class="nc">Window_main</span><span class="p">(</span><span class="n">tk</span><span class="o">.</span><span class="n">Tk</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">tk</span><span class="o">.</span><span class="n">Tk</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Окно"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">padX</span> <span class="o">=</span> <span class="mi">2</span>
<span class="bp">self</span><span class="o">.</span><span class="n">padY</span> <span class="o">=</span> <span class="mi">2</span>
<span class="bp">self</span><span class="o">.</span><span class="n">frame1</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">Frame</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">frame1</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">fill</span> <span class="o">=</span> <span class="s2">"both"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">btn</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="n">master</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">frame1</span><span class="p">,</span>
<span class="n">text</span> <span class="o">=</span> <span class="s2">"Кнопка"</span><span class="p">,</span>
<span class="n">font</span> <span class="o">=</span> <span class="p">(</span><span class="s2">""</span><span class="p">,</span> <span class="s2">"12"</span><span class="p">,</span> <span class="s2">"bold"</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">btn</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">side</span> <span class="o">=</span> <span class="s2">"left"</span><span class="p">,</span> <span class="n">anchor</span> <span class="o">=</span> <span class="s2">"n"</span><span class="p">,</span> <span class="n">padx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">padX</span><span class="p">,</span> <span class="n">pady</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">padY</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">lbl</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">Label</span><span class="p">(</span><span class="n">master</span> <span class="o">=</span> <span class="bp">self</span><span class="p">,</span>
<span class="n">text</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span>
<span class="n">font</span> <span class="o">=</span> <span class="s2">"12"</span><span class="p">,</span>
<span class="n">relief</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">SUNKEN</span><span class="p">,</span>
<span class="n">width</span> <span class="o">=</span> <span class="mi">50</span><span class="p">,</span>
<span class="n">anchor</span> <span class="o">=</span> <span class="s2">"w"</span><span class="p">,</span>
<span class="n">bg</span> <span class="o">=</span> <span class="s2">"white"</span><span class="p">,</span>
<span class="n">bd</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">lbl</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">side</span> <span class="o">=</span> <span class="s2">"top"</span><span class="p">,</span> <span class="n">anchor</span> <span class="o">=</span> <span class="s2">"n"</span><span class="p">,</span> <span class="n">fill</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">X</span><span class="p">,</span> <span class="n">expand</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span> <span class="n">padx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">padX</span><span class="p">,</span> <span class="n">pady</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">padY</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">txt</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">Text</span><span class="p">(</span><span class="n">master</span> <span class="o">=</span> <span class="bp">self</span><span class="p">,</span>
<span class="n">font</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"Courier New"</span><span class="p">,</span> <span class="s2">"12"</span><span class="p">),</span>
<span class="n">relief</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">SUNKEN</span><span class="p">,</span>
<span class="n">width</span> <span class="o">=</span> <span class="mi">50</span><span class="p">,</span>
<span class="n">height</span> <span class="o">=</span> <span class="mi">11</span><span class="p">,</span>
<span class="n">bg</span> <span class="o">=</span> <span class="s2">"white"</span><span class="p">,</span>
<span class="n">bd</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">txt</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="s2">"<Key>"</span><span class="p">,</span> <span class="k">lambda</span> <span class="n">a</span><span class="p">:</span> <span class="s2">"break"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">txt</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">side</span> <span class="o">=</span> <span class="s2">"top"</span><span class="p">,</span> <span class="n">anchor</span> <span class="o">=</span> <span class="s2">"n"</span><span class="p">,</span> <span class="n">fill</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">X</span><span class="p">,</span> <span class="n">expand</span> <span class="o">=</span> <span class="bp">True</span><span class="p">,</span> <span class="n">padx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">padX</span><span class="p">,</span> <span class="n">pady</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">padY</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">btn2</span> <span class="o">=</span> <span class="n">tk</span><span class="o">.</span><span class="n">Button</span><span class="p">(</span><span class="n">master</span> <span class="o">=</span> <span class="bp">self</span><span class="p">,</span>
<span class="n">font</span> <span class="o">=</span> <span class="p">(</span><span class="s2">""</span><span class="p">,</span> <span class="s2">"12"</span><span class="p">,</span> <span class="s2">"bold"</span><span class="p">),</span>
<span class="n">text</span> <span class="o">=</span> <span class="s2">"Кнопка2"</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">btn2</span><span class="o">.</span><span class="n">pack</span><span class="p">(</span><span class="n">side</span> <span class="o">=</span> <span class="s2">"left"</span><span class="p">,</span> <span class="n">anchor</span> <span class="o">=</span> <span class="s2">"n"</span><span class="p">,</span> <span class="n">padx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">padX</span><span class="p">,</span> <span class="n">pady</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">padY</span><span class="p">)</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">"__main__"</span><span class="p">:</span>
<span class="n">m</span> <span class="o">=</span> <span class="n">Window_main</span><span class="p">()</span>
<span class="n">m</span><span class="o">.</span><span class="n">mainloop</span><span class="p">()</span>
</pre></div>