Как упаковать tkinter виджет под существующим виджетом, который был упакован к левой стороне?

Обычно, да.

, Но если кто-то решает переопределить оператор затем, все ставки прочь:

bool operator == (const std::string& a, const char b[])
{
    return a != b; // paging www.thedailywtf.com
}
9
задан Bryce Thomas 28 September 2009 в 04:25
поделиться

3 ответа

Обычно есть два решения проблем с компоновкой:

  1. переход на использование сетки. Делать макеты, подобные тем, что вы пытаетесь выполнить, становится очень легко. Grid может решить, вероятно, 95% всех проблем с компоновкой (это удивительно, когда вы думаете об этом - Tk делает с одним менеджером то, что большинству инструментальных средств требуется полдюжины для выполнения!)

  2. используют несколько фреймов. Если некоторые виджеты нужно расположить сверху вниз, а некоторые слева направо, вы можете ' Я всегда получаю то, что хочешь, упаковывая все в один кадр. Используйте один фрейм для частей макета сверху вниз и дополнительные фреймы для контента с направлением слева направо.

Также помните, что виджеты не обязательно должны быть дочерними элементами виджета, в котором они упакованы / распределены по сетке . Вы можете использовать параметр «in», чтобы поместить виджеты в другой контейнер, кроме их родительского.

Например, в вашем конкретном примере вы можете создать три фрейма: верхний, средний и нижний. Упакуйте их сверху вниз в окне верхнего уровня. Затем вы можете упаковать первый текстовый виджет вверху, кнопку или кнопки горизонтально посередине, а другой текстовый виджет внизу.

Преимущество такого подхода заключается в том, что он значительно упрощает изменение макета в будущем (что, по моему опыту , всегда в какой-то момент случается). Ты не нет необходимости переделывать какие-либо из ваших виджетов, просто упакуйте / поместите / сетку их в какой-нибудь другой контейнер.

В вашем коротком примере это не имеет большого значения, но для сложных приложений эта стратегия может спасти жизнь.

Мой лучший совет заключается в следующем: о макете не нужно думать позже. Немного спланируйте, возможно, потратите пять минут на рисование на миллиметровой бумаге. Сначала определитесь с основными регионами вашего приложения и используйте для каждого фрейм или другой контейнер (панорамное окно, блокнот и т. Д.). Как только они у вас появятся, примените тот же подход «разделяй и властвуй» для каждого раздела. Это позволяет использовать разные типы макетов для разных разделов вашего приложения. Панели инструментов имеют горизонтальную компоновку, формы могут иметь вертикальную компоновку и т. Д.

Это не имеет большого значения, но для сложных приложений эта стратегия может спасти жизнь.

Мой лучший совет заключается в следующем: о макете не нужно думать второстепенно. Немного спланируйте, возможно, потратите пять минут на рисование на миллиметровой бумаге. Сначала определитесь с основными регионами вашего приложения и используйте для каждого фрейм или другой контейнер (окно с панелью, блокнот и т. Д.). Как только они у вас появятся, примените тот же подход «разделяй и властвуй» для каждого раздела. Это позволяет вам использовать разные типы макетов для разных разделов вашего приложения. Панели инструментов имеют горизонтальную компоновку, формы могут иметь вертикальную компоновку и т. Д.

Это не имеет большого значения, но для сложных приложений эта стратегия может спасти жизнь.

Мой лучший совет заключается в следующем: о макете не нужно думать позже. Немного спланируйте, возможно, потратите пять минут на рисование на миллиметровой бумаге. Сначала определитесь с основными регионами вашего приложения и используйте для каждого фрейм или другой контейнер (панорамное окно, блокнот и т. Д.). Как только они у вас появятся, примените тот же подход «разделяй и властвуй» для каждого раздела. Это позволяет вам использовать разные типы макетов для разных разделов вашего приложения. Панели инструментов имеют горизонтальную компоновку, формы могут иметь вертикальную компоновку и т. Д.

Сначала определитесь с основными регионами вашего приложения и используйте для каждого фрейм или другой контейнер (панорамное окно, блокнот и т. Д.). Как только они у вас появятся, примените тот же подход «разделяй и властвуй» для каждого раздела. Это позволяет использовать разные типы макетов для разных разделов вашего приложения. Панели инструментов имеют горизонтальную компоновку, формы могут иметь вертикальную компоновку и т. Д.

Сначала определитесь с основными регионами вашего приложения и используйте для каждого фрейм или другой контейнер (окно с панелью, блокнот и т. Д.). Как только они у вас появятся, примените тот же подход «разделяй и властвуй» для каждого раздела. Это позволяет вам использовать разные типы макетов для разных разделов вашего приложения. Панели инструментов имеют горизонтальную компоновку, формы могут иметь вертикальную компоновку и т. Д.

15
ответ дан 4 December 2019 в 08:01
поделиться

Сначала я неправильно понимал, как работает упаковка, и не осознавал, что вся левая сторона «востребована», когда я делал x.pack (side = LEFT) . Что я обнаружил после прочтения этого и ответа Алекса здесь, так это то, что на самом деле я не был на самом деле после того, как x был упакован с левой стороны, а, скорее, когда он был прикреплен слева, используя привязку = W (W для запада) вместо side = LEFT . Мой измененный фрагмент кода, который делает то, что я искал, выглядит следующим образом:

from Tkinter import *

root = Tk()

w = Text(root)
w.pack()

x = Button(root, text="Hi there!")
x.pack(anchor=W)

y = Text(root)
y.pack(side=BOTTOM)

root.mainloop()

Таким образом, x больше не «претендует» на левую сторону, он просто выровнен по левому краю (или западу) в пределах своего блока космос.

8
ответ дан 4 December 2019 в 08:01
поделиться

Упаковка происходит в том порядке, в котором вызываются методы .pack, поэтому, как только x "потребует" левую часть, это все - он займет левую часть своего родителя и все остальное. внутри своего родителя будет справа от него. Вам нужен фрейм для «посредничества», например ...:

from Tkinter import *

root = Tk()

w = Button(root, text="Mysterious W")
w.pack()

f = Frame(root)
x = Button(f, text="Hi there!")
x.pack()

y = Button(f, text="I be Y")
y.pack(side=BOTTOM)

f.pack(side=LEFT)

root.mainloop()

(тексты изменены на кнопки только для более непосредственной видимости макета - Tkinter на этом Mac не отображает тексты четко, пока они не будут в фокусе, но кнопки довольно ясно; -).

3
ответ дан 4 December 2019 в 08:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: