2013-02-06 61 views
0

如何在wx.TextCtrl中将选项卡宽度设置为4而不是8?
如果不可能使用什么替代wx.TextCtrl?wxPython wx.TextCtrl选项卡宽度

注:
mytxtCtrl.setDefaultStyle(wx.TextAttr()setTabs([...])不工作

+0

你有没有注意到['SetTabs'](http://xoomer.virg ilio.it/infinity77/wxPython/Widgets/wx.TextAttr.html#SetTabs)设置为十分之几毫米? – Fenikso

+0

顺便说一句:默认似乎不匹配8个空格。这是一些固定的宽度。 – Fenikso

+0

我知道这一点,它只适用于富文本ctrl。似乎纯粹的textCtrl不处理它。您的示例使用rich-text-ctrl。谢谢。 – wtayyeb

回答

1

SetTabs在零点几秒的设置毫米。不知道为什么,这是残酷的工作!

import wx 

TAB = 4 

TEST = "".join([" "*i*TAB + "|\n" + "\t"*i + "|\n" for i in range(1, 30, 2)]) 

class MainWindow(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     wx.Frame.__init__(self, *args, **kwargs) 

     self.panel = wx.Panel(self) 
     self.text = wx.TextCtrl(self.panel, style=wx.TE_PROCESS_TAB | wx.TE_RICH | wx.TE_MULTILINE) 

     self.sizer = wx.BoxSizer() 
     self.sizer.Add(self.text, 1, wx.ALL | wx.EXPAND) 

     self.text.Bind(wx.EVT_SIZE, self.SetTabs) 

     self.panel.SetSizerAndFit(self.sizer) 
     self.Show() 

     self.text.SetValue(TEST) 

    def SetTabs(self, e): 
     pixel_width_in_mm = 25.4/wx.ScreenDC().GetPPI()[0] 
     space_width_in_pixels = self.text.GetTextExtent(" ")[0] 
     tab_width_in_tenth_of_mm = (10 * TAB * space_width_in_pixels * pixel_width_in_mm) 
     textctrl_width_in_mm = (10 * self.text.GetSize()[0] * (1/pixel_width_in_mm)) 
     nr_of_tabs = int(textctrl_width_in_mm/tab_width_in_tenth_of_mm) 
     tabs = [int((i+1)*tab_width_in_tenth_of_mm) for i in range(nr_of_tabs)] 
     attr = wx.TextAttr() 
     attr.SetTabs(tabs) 
     self.text.SetDefaultStyle(attr) 

app = wx.App(False) 
win = MainWindow(None) 
app.MainLoop() 
-1

就像这样:!

wx.TextCtrl(panel, pos = (10, 10), size = (40, 20)) 
+0

你是否在问题中读过“TAB WIDTH”? – wtayyeb

+0

我很抱歉试图提供帮助。 Tab宽度是什么意思? – Evilunclebill

+0

让谁知道什么是制表符(\ t)的答案! – wtayyeb