微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WXPython,不能让文字换行对长字的 TextCtrl 起作用

如何解决WXPython,不能让文字换行对长字的 TextCtrl 起作用

我正在尝试创建一个全屏窗口,其中带有很长标签的 statictextctrl 被放置在一个表格中,当它们很多时带有垂直滚动条。我需要做的是根据每个 statictextctrl 可用的宽度(基于每行和 hpad 的 textctrl 数量)相应地包装标签。不幸的是,当有一个很长的单词时,我无法使其工作,即使我明确地将 textctrl 样式设置为 wx.TE_BESTWRAP(无论如何这是认值,但我认为它是值得的)试)。知道如何实现这一目标吗?

import wx
import wx.lib.scrolledpanel as scrolled

class MyPanel(scrolled.ScrolledPanel):

    def __init__(self,parent):
        scrolled.ScrolledPanel.__init__(self,parent,-1)
        
        
        ## Configuring the panel
        self.SetAutoLayout(1)
        self.SetupScrolling()
        self.SetScrollRate(1,40)
        
    # needs to be called after main window's laytou,so its size is actually
    # kNown and can be used to compute textctrl's width
    def Build(self):
        labelPerRow=7
        hgap = 40
        vgap = 20
        label_width=int(self.GetClientSize()[0]/labelPerRow)-hgap
        print("label width",label_width)
        
        grid_sizer = wx.FlexGridSizer(labelPerRow,vgap,hgap)
        
        self.SetSizer(grid_sizer)
        i=0
        for label in range(200)   :
            label = "very long title withaverybigwordthatdoesntfitonasinglelinesoitsquitehardtomanagewordwrap"+str(i)
            title = wx.StaticText(self,label=label,style=wx.ALIGN_CENTRE_HORIZONTAL |
                                        wx.TE_BESTWRAP)
            
            title.Wrap(int(label_width))
            grid_sizer.AddMany([(title)])
            i = i+1
            
        self.Layout()

class MyFrame(wx.Frame):

    def __init__(self):

        wx.Frame.__init__(self,None,title="Test",style=wx.NO_BORDER)
        self.Maximize(True)
        frameSizer = wx.BoxSizer()
        p = MyPanel(self)
        frameSizer.Add(p,1,wx.EXPAND)
        self.SetSizer(frameSizer)
        self.Layout()
        p.Build()


app = wx.App(0)
frame = MyFrame()
frame.Show()
app.MainLoop()

解决方法

这是我想出来的。我希望它对其他人有用。 基本上,它使用 <IfModule mod_rewrite.c> RewriteEngine on Options +FollowSymLinks RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/dist%{REQUEST_URI} -f RewriteRule .* dist/%{REQUEST_URI} [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/app%{REQUEST_URI} -f RewriteRule .* app/%{REQUEST_URI} [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .* /dist/main.php [L,QSA] </IfModule> RewriteRule ^ /dist/main.php [L,QSA] 计算拆分的每个组合,保留宽度适合且高度最小的标签。如果没有合适的换行符,它使用宽度最小的标签,并删除末尾的正确字符,用省略号替换它们,以使标签适合。它可以改进,例如使用最大行数或更多的文本对齐选项,但到目前为止它被证明是有效的。 请注意,如果展开的标签很长(组合数是空格数的指数),则计算所有组合可能会很耗时。

'\n'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。