2010-12-12 9 views
1

최대 alloted 공간을 채우는 스크롤 된 Tkinter 텍스트 상자를 만들고 싶습니다. 나는 그것의 종류를 일하고있다. ...스크롤 된 Tkinter 텍스트 상자 크기 조정

나는 창문을 쭉 펴는 어떤 이유 때문에 텍스트 위젯이 좋다. 그러나 스크롤 막대는 x 축에 1 톤의 패딩을 가져옵니다.

두 번째 문제는 화면의 스크롤 막대가 축소되는 경우입니다.

누구나이 두 프로그램에 대한 해결책을 알고 있습니까?

조각 :

self.Fr = Tkinter.Frame(self, width=self.Wi, height=self.He) 
    self.Fr.pack(side='right', fill='both', expand='yes') 


    self.Te = Tkinter.Text(self.Fr, font=self.Fo, fg=self.FG, bg=self.BG, 
          selectforeground=self.SFG, 
          selectbackground=self.SBG, 
          insertbackground=self.IBG, wrap='word', 
          undo=True, maxundo=100) 
    #self.Te.grid(column=0, row=0, sticky='NSEW') 
    self.Te.pack(side='left', fill='both', expand='yes') 


    self.Sc = Tkinter.Scrollbar(self.Fr, elementborderwidth=1) 
    #self.Sc.grid(column=1, row=0, sticky='NSEW') 
    self.Sc.pack(side='right', fill='both', expand='yes') 

    self.Te.configure(yscrollcommand=self.Sc.set) 
    self.Sc.configure(command=self.Te.yview) 

답변

6

당신이 fill='both'을 사용하기 때문에 귀하의 스크롤 모든 패딩을 가져옵니다. 비록 그것이 수직 스크롤바 였지만 x 축을 따라 여분의 공간을 차지하도록 요청했기 때문에 스크롤바 자체가 늘어나서 넓은 스크롤바를 만들 수 없으므로 패딩이 발생합니다. 세로 스크롤 막대는 Y 방향 만 채우고 가로 방향 스크롤바는 X 방향 채우기를 원합니다.

스크롤바가 화면을 벗어나는 이유는 설명하기가 약간 복잡하지만 간단한 해결책이 있습니다.

문제는 다음과 같습니다. pack으로 관리되는 창을 위젯에서 요구하는 것보다 작은 지점으로 축소하면 위젯이 자르기 시작합니다. 이것이 작동하는 방식은 위젯을 순서대로 처리하고, 창을 레이아웃 한 다음 나머지 위젯에 남은 공간을 할당하는 것입니다. 즉, 주문 초기에 위젯이 나머지 모든 시각적 공간을 차지하면 이후의 위젯이 표시되지 않습니다.

위에서 언급 한 "주문"은 포장 목록의 순서입니다. 특히, 항목이 압축 된 순서입니다. 따라서 텍스트 위젯을 압축하면 스크롤바 Tk가 먼저 텍스트 위젯을 배치하고 나머지 공간은 스크롤 막대에 할당됩니다. 스크롤바를 먼저 패킹 한 경우 레이아웃이 배치되고 텍스트 위젯에 나머지 공간이 주어집니다.

모두 매우 복잡한 것처럼 들리지만 멋진 것은 물건을 올바른 순서대로 포장하면 모두 작동한다는 것입니다.

대략적으로 말하자면, 포장하는 마지막 위젯이 expand이 true로 설정된 것을 확인하는 것입니다. 이것은 당신의 "신축성있는"위젯입니다. 그런 식으로 모든 고정 크기 위젯이 먼저 필요한 공간을 차지하게되고, "탄력적 인"위젯이 남아있는 모든 것을 차지하게됩니다.

텍스트 위젯에 요청 된 너비와 높이를 부여하는 또 다른 해결책이 있습니다. 이를 통해 패커는 처음에 공간을 할당 할 때 공간을 조금만 할당합니다. 따라서 창을 축소하면 텍스트 위젯이 축소되어 축소 될 것입니다. 팩의 가장 큰 특징 중 하나는 모든 위젯에 자연적인 크기를 부여 할 수 있다는 것입니다 (또는 단추와 레이블의 경우 내용에 따라 자연적인 크기를 가정 함) 팩커가 모든 것을 수행 할 수 있기 때문에 매우 실용적이지는 않습니다 그 일. 너비와 높이를 1로 설정하면 초기 크기 (명시 적으로 더 큰 크기로 설정하지 않은 경우)는 다소 작습니다.

이 동작은 모두 pack의 설명서 페이지에 문서화되어 있지만이 동작을 완전히 이해하려면이 설명서를 자세히 읽어야합니다.

+0

와우, 정말 좋은 정보입니다. 나는 주로 .grid와 .place 메서드로 작업했다. 그러므로 나는 .pack 방법이 어떻게 작동했는지 모호했다. 이것은 확실히 나의 오해를 해결했다. – rectangletangle

관련 문제