Python 动态更改wx.TextCtrl的大小
我对wx.TextCtrl有问题。我只想设置控制框的大小,但我想动态地进行设置。而这在任何情况下都不起作用 这是我的源代码Python 动态更改wx.TextCtrl的大小,python,resize,wxpython,textctrl,wx.textctrl,Python,Resize,Wxpython,Textctrl,Wx.textctrl,我对wx.TextCtrl有问题。我只想设置控制框的大小,但我想动态地进行设置。而这在任何情况下都不起作用 这是我的源代码 #!/usr/bin/env python # -*- coding: utf-8 -*- import wx class Test(wx.Frame): def __init__(self, parent): super().__init__(parent) # Panel self.panel = wx.Panel(self)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wx
class Test(wx.Frame):
def __init__(self, parent):
super().__init__(parent)
# Panel
self.panel = wx.Panel(self)
# Boxes
self.numbers = wx.StaticBox(self.panel, wx.ID_ANY, "Numbers")
# Elements
self.stN1 = wx.StaticText(self.numbers, wx.ID_ANY, "Number 1:")
self.tcN1 = wx.TextCtrl(self.numbers, wx.ID_ANY, style=wx.TE_CENTER)
self.tcN1.SetSize(wx.Size(36, 20))
self.stN2 = wx.StaticText(self.numbers, wx.ID_ANY, "Number 2:")
self.tcN2 = wx.TextCtrl(self.numbers, wx.ID_ANY, size=wx.Size(36, 20), style=wx.TE_CENTER)
# Sizers
self.szTop = wx.BoxSizer(wx.VERTICAL)
self.szNumbers = wx.StaticBoxSizer(self.numbers, wx.VERTICAL)
self.szN1 = wx.BoxSizer(wx.HORIZONTAL)
self.szN2 = wx.BoxSizer(wx.HORIZONTAL)
self.szN1.Add(self.stN1, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)
self.szN1.Add(self.tcN1, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)
self.szN2.Add(self.stN2, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)
self.szN2.Add(self.tcN2, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 5)
self.szNumbers.Add(self.szN1)
self.szNumbers.Add(self.szN2)
self.szTop.Add(self.szNumbers, 0, wx.ALL, 5)
self.panel.SetSizerAndFit(self.szTop)
self.Fit()
self.Show()
if __name__ == "__main__":
app = wx.App()
Test(None)
app.MainLoop()
此代码将给出以下结果:
如您所见,当我在控件的定义中设置它时,大小在TextCtrl2中设置正确。但是我有很多这样的控件,所以我想在SetSizeOfTextControltextControl方法中动态设置大小。因为如果我以后决定使用另一个大小,我只需要在这个方法中更改1行,而不是在所有定义中更改20行
因此,我尝试使用给定的方法wx.TextCtrl.SetSize,正如您在我的TextCtrl1中看到的那样。但这是行不通的。是的,但只有在我调用SetSizersAndFit之前。此时,大小将再次设置回默认值
正确的方法是什么?如何在使用大小调整器时动态更改wx.TextCtrl的大小
非常感谢 您是否考虑过将大小作为一个变量
size1 = wx.Size(36,20)
self.tcN1 = wx.TextCtrl(self.numbers, wx.ID_ANY, size=size1, style=wx.TE_CENTER)
self.tcN2 = wx.TextCtrl(self.numbers, wx.ID_ANY, size=size1, style=wx.TE_CENTER)
您是否考虑过将大小作为一个变量
size1 = wx.Size(36,20)
self.tcN1 = wx.TextCtrl(self.numbers, wx.ID_ANY, size=size1, style=wx.TE_CENTER)
self.tcN2 = wx.TextCtrl(self.numbers, wx.ID_ANY, size=size1, style=wx.TE_CENTER)
如果设置了小部件的最小大小,那么大小调整器将在计算布局时使用该值,并且当您将大小传递给小部件的构造函数时,它也会设置最小大小。但是调用SetSize不会更改最小大小,因此下次sizer进行布局时,它会将小部件的大小重置为最小大小,而不是当前大小。在大多数情况下,您确实希望调用SetMinSize,然后再调用父窗口小部件的布局方法
此外,这对帮助您解决布局问题非常有帮助,甚至可以帮助您更好地了解事物的工作原理:如果设置了小部件的最小大小,则大小调整器将在计算布局时使用该值,并且当您将大小传递给小部件的构造函数时,它也会设置最小大小。但是调用SetSize不会更改最小大小,因此下次sizer进行布局时,它会将小部件的大小重置为最小大小,而不是当前大小。在大多数情况下,您确实希望调用SetMinSize,然后再调用父窗口小部件的布局方法
此外,这对帮助您解决布局问题,甚至是更好地理解事物的工作原理也非常有帮助:是的,我已经考虑过了。这是我目前的解决办法,但我不喜欢那样。因为我需要调用一个函数。不仅仅是尺寸。我想设置对齐方式,最大长度的数字,只允许整数等。。。因此,一个能够实现所有这些功能的函数会更好。我确信这是可能的,但我不知道怎么做是的,我已经考虑过了。这是我目前的解决办法,但我不喜欢那样。因为我需要调用一个函数。不仅仅是尺寸。我想设置对齐方式,最大长度的数字,只允许整数等。。。因此,一个能够实现所有这些功能的函数会更好。我确信这是可能的,但我不知道怎么做^^