2016-07-06 3 views
1

아주 간단한 질문에 맞게 :wxPython을 textctrl 자동 크기 조정 텍스트를

필자는 wxPython에의 textctrl 상자를 가지고있는 나는 긴 텍스트를 표시 할 수 있습니다. 텍스트에는 개행 문자가 포함될 수 있습니다. 그렇지 않을 수도 있습니다.

내가하는 일과 상관없이 상자는 항상 조금 짧게 보입니다.

글꼴 크기를 받고 필요한 높이를 계산하는 노력의 정도에 갔다 필자와 수학은 작동하는 것 같다,하지만 상자가 폭이 괜찮 ... 너무 짧고 내가

샘플을 기대하는 것 여기 코드 :

Message = 'really long text....just an example here............................................................................................................................' 

self.MessageBoxText = wx.TextCtrl(self, wx.ID_ANY, Message, wx.DefaultPosition, wx.DefaultSize, wx.TE_RICH|wx.TE_MULTILINE|wx.TE_BESTWRAP) 
self.MessageText.SetFont(wx.Font(18, 74, 90, 90, False, 'Arial')) 

dc = wx.WindowDC(self.panel) 

textWidthSingle, textHeightSingle = dc.GetTextExtent(self.MessageBoxText.GetValue()) 

textWidth, textHeight,other = 
dc.GetMultiLineTextExtent(self.MessageText.GetValue(),self.MessageText.GetFont()) 

self.msgBoxWidth = 800 #pixels 
rows = textWidth/self.msgBoxWidth 
self.msgBoxHeight = (textHeightSingle * rows) + 20 

self.MessageBoxText.SetMinSize((self.msgBoxWidth,self.msgBoxHeight)) 

self.msgSizer.Add(self.MessageBoxText, 1, wx.ALL|wx.EXPAND, 0) 
self.topSizer.Add(self.msgSizer, 1, wx.ALL|wx.EXPAND , 10) 
self.SetSizer(self.topSizer) 
self.Fit() 
self.Center() 

스크롤 막대 나 전체 텍스트를 볼 수 있도록 않는,하지만 난 스크롤 바를 사용하지 않고 모든 것을 볼 단지 textctrl 크기를 조정 기대하고 경우에만 스크롤이 필요했다 그것 맞게 너무 큰 화면.

내가 selfMessageBoxText.GetSize()를 쿼리 할 수 ​​있기 때문에 setMinSize가 작동하지 않는 것 같아서 SetMinSize를 사용하여 설정 한 시간보다 짧아집니다.

topSizer에도 목록 상자와 비트 맵이있을 수 있지만, 이것이 내가 생각할 수있는 가장 기본적인 예입니다.

뭔가 간단 할 수 있습니다. 내가 원하는 것을 얻는 방법에 대한 아이디어가 있습니까?

덕분 라인 사이의 화소 미지 량있을 것 같은 까다로운 제안 될 수있는 여러 textctrls 대한 높이를 추정

+0

필자는 textctrl 값을 공백으로두고, 내 sizer에 추가하고, 모든 것을 맞추고, textctrl의 값을 설정하고 다시 지정하여 원하는 방식으로 작업했습니다. 이렇게하면 크기를 "강요하는"비트를 삭제하고 sizer가 작업을 수행하도록 허용 할 수있었습니다. 그 펑키 두 번 맞는 데 필요하지만, 비트 맵, textctrls, listboxes, comboboxes의 30 + 조합의 내 테스트 침대 이상 완벽하게 보였다. 미래에 누군가를 도울 수 있습니다. 그러나 아픈 것은 확실히 expando를 한번보세요! Robin에게 감사드립니다! – pyNewbie

답변

1

는 공간 미지의 양 등의 텍스트 본문, 상하 필요 그 중 그 가치는 플랫폼마다 다를 수 있으며 동일한 플랫폼의 서로 다른 버전간에 다를 수 있습니다.

wx.lib.expando 모듈과 관련 샘플을 데모에서 살펴보십시오. 위에서 확인한 문제를 해결하려고 노력하며 보통 대단히 잘합니다.