2016-07-06 54 views
1

很簡單的問題:wxPython的textctrl自動調整大小以適應文本

Ive得到了一個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看到的一切,而不滾動條,如果只需要滾動條的過大,以適應屏幕。

setMinSize似乎沒有工作,因爲我可以查詢self.messageBoxText.GetSize(),它最終比我設置使用SetMinSize更短。

我也可能在topSizer中有一個列表框和位圖,但這是我能想到的最基本的例子。

它必須是簡單的東西。關於如何獲得我想要的任何想法?

感謝

+0

我按照我想要的方式工作,將textctrl值留空,將其添加到我的sizer,裝配所有內容,然後設置textctrl的值並重新進行修改。這樣做可以讓我刪除相當多的「強制」大小,只是讓sizer完成他們的工作。它的時髦不得不適合兩次,但它看起來完美超過了我的測試牀上30位以上的位圖,textctrls,listboxes,comboboxes的組合。未來可能會幫助別人。但我肯定會看看expando!感謝羅賓! – pyNewbie

回答

1

估算用於多textctrls高度可以是一個棘手的問題,因爲會有行之間的像素的未知量,上面和下面正文中,等。在需要的空間中的一些未知量最重要的是,這些值可以跨平臺,甚至同一平臺的不同版本之間有所不同。

看看演示中的wx.lib.expando模塊和相關示例。它試圖處理上述問題,通常做得很好。

相關問題