Обычно, да.
, Но если кто-то решает переопределить оператор затем, все ставки прочь:
bool operator == (const std::string& a, const char b[])
{
return a != b; // paging www.thedailywtf.com
}
Обычно есть два решения проблем с компоновкой:
переход на использование сетки. Делать макеты, подобные тем, что вы пытаетесь выполнить, становится очень легко. Grid может решить, вероятно, 95% всех проблем с компоновкой (это удивительно, когда вы думаете об этом - Tk делает с одним менеджером то, что большинству инструментальных средств требуется полдюжины для выполнения!)
используют несколько фреймов. Если некоторые виджеты нужно расположить сверху вниз, а некоторые слева направо, вы можете ' Я всегда получаю то, что хочешь, упаковывая все в один кадр. Используйте один фрейм для частей макета сверху вниз и дополнительные фреймы для контента с направлением слева направо.
Также помните, что виджеты не обязательно должны быть дочерними элементами виджета, в котором они упакованы / распределены по сетке . Вы можете использовать параметр «in», чтобы поместить виджеты в другой контейнер, кроме их родительского.
Например, в вашем конкретном примере вы можете создать три фрейма: верхний, средний и нижний. Упакуйте их сверху вниз в окне верхнего уровня. Затем вы можете упаковать первый текстовый виджет вверху, кнопку или кнопки горизонтально посередине, а другой текстовый виджет внизу.
Преимущество такого подхода заключается в том, что он значительно упрощает изменение макета в будущем (что, по моему опыту , всегда в какой-то момент случается). Ты не нет необходимости переделывать какие-либо из ваших виджетов, просто упакуйте / поместите / сетку их в какой-нибудь другой контейнер.
В вашем коротком примере это не имеет большого значения, но для сложных приложений эта стратегия может спасти жизнь.
Мой лучший совет заключается в следующем: о макете не нужно думать позже. Немного спланируйте, возможно, потратите пять минут на рисование на миллиметровой бумаге. Сначала определитесь с основными регионами вашего приложения и используйте для каждого фрейм или другой контейнер (панорамное окно, блокнот и т. Д.). Как только они у вас появятся, примените тот же подход «разделяй и властвуй» для каждого раздела. Это позволяет использовать разные типы макетов для разных разделов вашего приложения. Панели инструментов имеют горизонтальную компоновку, формы могут иметь вертикальную компоновку и т. Д.
Это не имеет большого значения, но для сложных приложений эта стратегия может спасти жизнь.Мой лучший совет заключается в следующем: о макете не нужно думать второстепенно. Немного спланируйте, возможно, потратите пять минут на рисование на миллиметровой бумаге. Сначала определитесь с основными регионами вашего приложения и используйте для каждого фрейм или другой контейнер (окно с панелью, блокнот и т. Д.). Как только они у вас появятся, примените тот же подход «разделяй и властвуй» для каждого раздела. Это позволяет вам использовать разные типы макетов для разных разделов вашего приложения. Панели инструментов имеют горизонтальную компоновку, формы могут иметь вертикальную компоновку и т. Д.
Это не имеет большого значения, но для сложных приложений эта стратегия может спасти жизнь.Мой лучший совет заключается в следующем: о макете не нужно думать позже. Немного спланируйте, возможно, потратите пять минут на рисование на миллиметровой бумаге. Сначала определитесь с основными регионами вашего приложения и используйте для каждого фрейм или другой контейнер (панорамное окно, блокнот и т. Д.). Как только они у вас появятся, примените тот же подход «разделяй и властвуй» для каждого раздела. Это позволяет вам использовать разные типы макетов для разных разделов вашего приложения. Панели инструментов имеют горизонтальную компоновку, формы могут иметь вертикальную компоновку и т. Д.
Сначала определитесь с основными регионами вашего приложения и используйте для каждого фрейм или другой контейнер (панорамное окно, блокнот и т. Д.). Как только они у вас появятся, примените тот же подход «разделяй и властвуй» для каждого раздела. Это позволяет использовать разные типы макетов для разных разделов вашего приложения. Панели инструментов имеют горизонтальную компоновку, формы могут иметь вертикальную компоновку и т. Д. Сначала определитесь с основными регионами вашего приложения и используйте для каждого фрейм или другой контейнер (окно с панелью, блокнот и т. Д.). Как только они у вас появятся, примените тот же подход «разделяй и властвуй» для каждого раздела. Это позволяет вам использовать разные типы макетов для разных разделов вашего приложения. Панели инструментов имеют горизонтальную компоновку, формы могут иметь вертикальную компоновку и т. Д. Сначала я неправильно понимал, как работает упаковка, и не осознавал, что вся левая сторона «востребована», когда я делал 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
больше не «претендует» на левую сторону, он просто выровнен по левому краю (или западу) в пределах своего блока космос.
Упаковка происходит в том порядке, в котором вызываются методы .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 не отображает тексты четко, пока они не будут в фокусе, но кнопки довольно ясно; -).