【问题标题】:wxPython and STC Margins - Top and BottomwxPython 和 STC 边距 - 顶部和底部
【发布时间】:2013-01-16 13:20:07
【问题描述】:

有没有办法在我的程序的顶部和底部为 3 和 4 实现填充?

或者有没有像添加 \n 之类的解决方法......

感觉好像行号和 Styled 文本离顶部和底部太近了。

【问题讨论】:

    标签: python wxpython wxwidgets scintilla


    【解决方案1】:

    使用嵌套在 sizer 中的相同颜色的面板作为一种肮脏的解决方法怎么样?

    import wx
    import wx.stc as stc
    
    class MainWindow(wx.Frame):
        def __init__(self, *args, **kwargs):
            wx.Frame.__init__(self, *args, **kwargs)
    
            self.panel = wx.Panel(self)
    
            self.text = stc.StyledTextCtrl(self.panel)
            self.text.SetWindowStyle(self.text.GetWindowStyle() | wx.NO_BORDER)
            self.text.StyleSetSpec(stc.STC_STYLE_DEFAULT, "size:15,face:Courier New")
            self.text.SetWrapMode(stc.STC_WRAP_WORD)
            self.text.SetMarginLeft(50)
            self.text.StyleSetSpec(stc.STC_STYLE_LINENUMBER, "back:#FFFFFF")
    
            self.menu = wx.Menu()
            self.menu.Append(wx.ID_ABOUT, "&About", "Information about this program")
            self.menu_bar = wx.MenuBar()
            self.menu_bar.Append(self.menu, "&File")
            self.SetMenuBar(self.menu_bar)
    
            self.panel_top = wx.Panel(self.panel, size = (20, -1))
            self.panel_top.SetBackgroundColour(wx.WHITE)
            self.panel_bottom = wx.Panel(self.panel, size = (20, -1))
            self.panel_bottom.SetBackgroundColour(wx.WHITE)
    
            self.sizer = wx.BoxSizer(wx.VERTICAL)
            self.sizer.Add(self.panel_top, 0, wx.ALL | wx.EXPAND)
            self.sizer.Add(self.text, 1, wx.ALL | wx.EXPAND)
            self.sizer.Add(self.panel_bottom, 0, wx.ALL | wx.EXPAND)
    
            self.border = wx.BoxSizer()
            self.border.Add(self.sizer, 1, wx.ALL | wx.EXPAND, border=20)
    
            self.panel.SetSizerAndFit(self.border)
    
            self.text.Bind(stc.EVT_STC_CHANGE, self.OnChange)
            self.Show()
    
            self.text.SetText("Line!\n"*3)
    
        def OnChange(self, e):
            lines = self.text.GetLineCount()
            width = self.text.TextWidth(stc.STC_STYLE_LINENUMBER, str(lines)+" ")
            self.text.SetMarginWidth(0, width)
    
    
    if __name__ == "__main__":
        app = wx.App(False)
        win = MainWindow(None)
        app.MainLoop()
    

    对于你的代码,修改如下:

      self.panel_top = wx.Panel(self.panel, size = (20, -1))
      self.panel_top.SetBackgroundColour(wx.BLACK)
      self.panel_bottom = wx.Panel(self.panel, size = (20, -1))
      self.panel_bottom.SetBackgroundColour(wx.BLACK)
    
      #### Add the STC to a Sizer. ####
      sizer = wx.BoxSizer(wx.VERTICAL)
      sizer.Add(self.panel_top, 0, wx.EXPAND,border=20)
      sizer.Add(self.text, 1, wx.EXPAND,border=20)
      sizer.Add(self.panel_bottom, 0, wx.EXPAND,border=20)
      self.panel.SetSizer(sizer)
    

    【讨论】:

    • 这是我当前的代码。我将如何实施它? Sizer 把我搞糊涂了。 pastebin.com/K6hbSCUU
    • 我已将 hack 添加到您的代码中。你应该真正学习如何使用 sizer,因为它们是 wxPython 的基础。
    • 我正在慢慢学习,它有点混乱..我可能需要画一个图表,看看它是如何工作的..谢谢!
    • 另外,是否可以实现自定义(更简单)滚动条而不是经典的 Windows 滚动条?我想要的是不同颜色的向上和向下滚动箭头,不同颜色的滚动 bg 和实际滚动块本身更纤细?
    • 我不是风格化应用的粉丝,所以我不知道。你必须自己学习的东西。
    【解决方案2】:

    不,我认为 Scintilla 没有控制顶部和底部边距大小的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-05
      • 2019-01-20
      • 2015-09-15
      • 2020-12-28
      • 2015-06-15
      相关资源
      最近更新 更多