0

我有一个样式=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。)

4

1 回答 1

0

这可能是你的环境,它在使用 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()

这段代码是否以同样的方式行为不端?

于 2019-04-29T15:04:28.727 回答