【问题标题】:trouble getting wx.TextCtrl contents to re-center on resize无法让 wx.TextCtrl 内容重新居中调整大小
【发布时间】:2019-04-26 17:20:02
【问题描述】:

我有一个样式=wx.TE_CENTRE 的 TextCtrl,我希望/期望在调整 TextCtrl 大小时它的内容保持居中。但是,文本保留在 TextCtrl 的左侧。

import wx

class MyApp(wx.App):
    def OnInit(self):
        frame = wx.Frame(None)
        frame.Show(True)
        self.SetTopWindow(frame)
        self.myText = wx.TextCtrl(frame, value="A", style=wx.TE_CENTRE)

        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(self.myText, wx.EXPAND)

        frame.SetSizer(sizer)
        sizer.Fit(frame)

        self.Bind(wx.EVT_SIZE, self.OnSize)
        return True

    def OnSize(self, evt):
        self.myText.SetValue("after resize")

myApp = MyApp(0)
myApp.MainLoop()

经过大量试验和错误后,我通过执行以下操作两个使其工作:

  • 在我的 wx.EVT_SIZE 处理程序中刷新 TextCtrl
  • 将样式 wx.TE_RICH 添加到 TextCtrl

为什么这两个都是必要的?我想了解我在这里做错了什么。 (我在 Win7 上使用 wxPython 4.0.4。)

【问题讨论】:

    标签: wxpython wxtextctrl


    【解决方案1】:

    可能是你的环境,它在使用 wx 4.0.4 的 Linux 上肯定可以正常工作
    这可能是因为您是在 wx.App 类中完成所有这些操作的。
    按照惯例,这段代码会这样写:

    import wx
    
    class MyFrame(wx.Frame):
        def __init__(self,parent):
            wx.Frame.__init__(self,parent,-1,("My Frame"), size=(200,100))
            self.myText = wx.TextCtrl(self, value="A", style=wx.TE_CENTRE)
            sizer = wx.BoxSizer(wx.HORIZONTAL)
            sizer.Add(self.myText, wx.EXPAND)
            self.SetSizer(sizer)
            self.Show()
    
    myApp = wx.App()
    frame = MyFrame(None)
    myApp.MainLoop()
    

    这段代码的行为是否相同?

    【讨论】:

    • 您的代码确实在 Win7 上工作。但是,如果我添加一个 wx.EVT_SIZE 处理程序,它就会中断。也就是说,除非我将 evt.Skip() 添加到处理程序。随后,我发现如果我将 evt.Skip() 添加到我的 wx.EVT_SIZE 处理程序 (!),我的原始代码 确实 工作。感谢您的回答;它把我推向了正确的方向。
    猜你喜欢
    • 2013-08-27
    • 1970-01-01
    • 2018-12-13
    • 2014-10-21
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    相关资源
    最近更新 更多