Как увеличить поля в моем редакторе? - PullRequest
0 голосов
/ 29 октября 2018

Я создал текстовый редактор с номерами строк, и он отлично работает, но всякий раз, когда мои строки доходят до тысяч, например, он не помещается на полях. Как сделать так, чтобы поля начинались с той же длины, что и число, и увеличивались при необходимости? Example

Редактор:

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()

Спасибо!

1 Ответ

0 голосов
/ 29 октября 2018

Попробуйте установить ширину поля при внесении изменений в элемент управления, привязав к 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...