首页 > 解决方案 > 如何在我的编辑器中扩展边距?

问题描述

我制作了一个带有行号的文本编辑器,它工作正常,但是每当我的行数达到数千行时,它就不适合页边距。如何使边距以与数字相同的长度开始并在需要时增加?例子

编辑:

import wx
import wx.stc as stc

class Window(wx.Frame):
    def __init__(self, parent, title):
        self.leftMarginWidth = 35
        wx.Frame.__init__(self, parent, title=title, size=(500, 500))
        self.control = stc.StyledTextCtrl(self, style=wx.TE_MULTILINE | wx.TE_WORDWRAP)
        self.clipboard = wx.Clipboard()
        self.Margins()
    def Margins(self):
        self.control.SetViewWhiteSpace(False)
        self.control.SetMargins(5, 0)
        self.control.SetMarginType(1, stc.STC_MARGIN_NUMBER)
        self.control.SetMarginWidth(1, self.leftMarginWidth)

def main():
    app = wx.App()
    frame = Window(None, "Text Editor")
    frame.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()

谢谢!

标签: wxpython

解决方案


尝试在控件发生更改时设置边距宽度,绑定到EVT_STC_UPDATEUI.

import wx
import wx.stc as stc

class Window(wx.Frame):
    def __init__(self, parent, title):
        self.leftMarginWidth = 16
        wx.Frame.__init__(self, parent, title=title, size=(500, 500))
        self.control = stc.StyledTextCtrl(self, style=wx.TE_MULTILINE | wx.TE_WORDWRAP)
        self.clipboard = wx.Clipboard()
        self.Margins()
        self.control.Bind(stc.EVT_STC_UPDATEUI, self.Scroll)

    def Margins(self):
        self.control.SetViewWhiteSpace(False)
        self.control.SetMargins(5, 0)
        self.control.SetMarginType(1, stc.STC_MARGIN_NUMBER)

    def Scroll(self,event):
        x = self.control.GetFirstVisibleLine()
        y = self.control.LinesOnScreen()
        x = x+y
        x = len(str(x)) #calculate the number of digits in the highest visible line number
        self.control.SetMarginWidth(1, x*16) #Reset the margin width

def main():
    app = wx.App()
    frame = Window(None, "Text Editor")
    frame.Show()
    app.MainLoop()

if __name__ == '__main__':
    main()

推荐阅读