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