如何在wxPython中修改TextCtrl的宽度?

时间:2013-01-13 18:41:18

标签: python wxpython

我正在尝试创建一个具有默认高度但是自定义宽度的文本控件。这是我目前的代码:

tc = wx.TextCtrl(self, -1)
tc.Size.SetWidth(300)

但文本控件的宽度保持不变。我也尝试在更改宽度后调用tc.Layout()而没有结果。我不想在类构造函数中输入自定义大小,因为我希望它使用默认高度。我还尝试过更详细,以防tc.GetSize返回Size对象的深层副本:

tc = wx.TextCtrl(self, -1, size=(300, 23))

tc_size = tc.Size
tc_size.SetWidth(300)

tc.Size = tc_size
tc.Layout()

也无济于事。为什么我的代码不起作用,如何使其工作?


在构造函数中设置大小有效,因此sizer与问题无关。

2 个答案:

答案 0 :(得分:9)

我刚注意到我可以将(300, -1)作为文本控件的大小传递:

wx.TextCtrl(self, -1, size=(300, -1))

这导致文本控件使用默认高度。这解决了我的问题,但技术上没有回答我的问题,所以我想要一个更好的答案。


编辑:这个答案加上以下评论回答了我的问题。

答案 1 :(得分:4)

您应该让sizer控制控件的大小,而不是显式设置它们。

import wx

class Frm(wx.Frame):
   def __init__(self, *args, **kwargs):
      super(Frm, self).__init__(*args, **kwargs)
      txt = wx.TextCtrl(self)
      s = wx.BoxSizer(wx.HORIZONTAL)
      s.Add(txt, 1)
      self.SetSizer(s)
      self.Layout()


app = wx.PySimpleApp()
frame = Frm(None)
frame.Show()
app.MainLoop()

这使得控件可以通过代码的一般指导相互排列。因此,例如,在Mac和Windows上运行相同的代码仍然会产生一个很好的布局。

我意识到这并没有直接回答你的问题,而是想在你不了解它们的情况下轻推你们。编写和维护UI布局需要花费大量的苦差事。