작업을 수행하는 데는 여러 가지 방법이 있습니다. 중요한 것은 한 번에 모든 레이아웃 문제를 해결하려고 시도하지 않는 것입니다. 당신은 "분열과 정복"접근법을 취해야합니다. UI를 논리적 그룹으로 나누고 그룹을 정렬 한 다음 각 그룹을 더 작은 그룹으로 나누고 정렬합니다.
예를 들어, 여기에 내가이 특정한 배열을 할 수있는 방법은 다음과 같습니다
내가 여섯 개 기능 (또는 6 개 클래스, 당신이 선호하는 경우), 각 주요 섹션 하나를 작성하여 시작할 것
. gui 코드의 주요 부분은 다음과 같습니다.
class Example(object):
def __init__(self):
root = tk.Tk()
topleft = self.create_topleft()
topmid = self.create_topmid()
...
논리 배열은 2x3 격자로 보입니다. 마지막으로
class Example(object):
def __init__(self):
...
root.grid_rowconfigure(0, weight=1)
root.grid_rowconfigure(1, weight=1)
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)
root.grid_columnconfigure(1, weight=1)
, 내가 것 : 가정 당신은 모든 부분이 동일하게 확장 할 수 창 크기를 조정할 때 여분의 공간이 동일하게 행과 열 사이에 분리되도록, 나는 모든 행과 모든 열 모두 동일한 무게를 줄 수 원하는 그리드에 위젯을 배치하십시오.
class Example(object):
def __init__(self):
...
topleft.grid(row=0, column=0, sticky="nsew")
topmid.grid(row=0, column=1, sticky="nsew")
...
이렇게하면 UI의 일반 구조가 설정됩니다. 다른 위젯을 추가하지 않고 크기 조정 동작을 테스트 할 수도 있습니다. 각 섹션에 고유 한 색과 임시 크기를 부여한 다음 창의 크기를 조정하여 각 섹션의 응답 방식을 확인하십시오.
이제 각 섹션이 나머지 GUI에 어떻게 영향을 미치는지 걱정하지 않고도 각 섹션을 독립적으로 개발할 수 있습니다. 예를 들어, 일부 섹션의 위젯은 pack
을 사용할 수 있으며, 일부는 grid
을 사용할 수 있으며 가장 적합한 경우 place
을 사용할 수도 있습니다.
예를 들어 ctrmid
은 상단에 큰 위젯이 있고 하단에 작은 위젯이 있기 때문에 pack
에 적합합니다.
ctrleft
자체는 두 개의 레이블과 내부 프레임처럼 보입니다. 이들은 pack
으로 배열 될 수 있지만, 내부 프레임 내부의 위젯은 grid
을 사용하여 테이블을 구성 할 수 있습니다.
내가 이해할 수없는 또 다른 사항은 grid_rowconfigure/columnconfigure의 가중치입니다. ... (즉,다른 프레임에 3의 가중치를 갖는 1의 가중치는 3이 1의 1/3 크기로 성장할 것임을 의미합니다.
당신은 거꾸로 가지고 있습니다. 가중치는 추가 공간이 할당되는 방법을 설명하며 가중치는 비례합니다. 가중치가 2이면 행 또는 열이 가중치가 1 인 열의 두 배가 넘는 추가 공간을 얻게됩니다.
[스크립트를 제공 할 수 있습니까?] (https://stackoverflow.com/help/) mcve) – Simon
이 질문 중 간단한 시행 착오를 통해 스스로 대답 할 수는 없습니다. 기대했던 것과 다르게 보이는 경우 무언가를 시도해보십시오. 그 이유를 말할 수 없으므로 여기에 질문을 게시하십시오. – Nae