python - 动态改变 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)

    # 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 中的大小已正确设置。但是我有很多这样的控件,所以我想在方法“SetSizeOfTextControl(textControl)”中动态设置大小。 (因为如果我以后决定使用其他尺寸,我只需要更改此方法中的 1 行而不是所有定义中的 20 行。)

所以我尝试使用给定的方法 wx.TextCtrl.SetSize() 正如您在我的 TextCtrl1 中看到的那样。但这不起作用。好吧,它确实如此,但仅在我调用 SetSizersAndFit() 之前。此时尺寸再次设置回默认值。

正确的做法是什么?如何在使用 sizer 时动态更改 wx.TextCtrl 的大小? :)

非常感谢!

最佳答案

如果设置了小部件的最小尺寸,那么 sizer 将在计算布局时使用该值,并且当您将尺寸传递给小部件的构造函数时,它也会设置最小尺寸。但调用 SetSize 不会更改最小尺寸,因此下次 sizer 执行其 Layout 时,它会将小部件的尺寸重置为最小尺寸而不是当前尺寸。在像这样的大多数情况下,您确实希望调用 SetMinSize,然后调用父小部件的 Layout 方法。

此外,这对于帮助您解决布局问题非常有帮助,甚至只是更好地理解事物的工作原理:https://wiki.wxpython.org/Widget_Inspection_Tool

关于python - 动态改变 wx.TextCtrl 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50719506/

相关文章:

image - 小屏幕的 Bootstrap 图像调整大小,不起作用

python - 我正在尝试制作一个具有可变透明度的 wx.Frame(基于 erase bk 事件中映射的 png)

python - Python 3.4.1 中的 wxPython

python - 是否可以使用分类随机变量在 PyMC3 中创建分层模型?

python - 检测 Django 模型中的字段变化

python - 具有动态宽度列的 QML TableView

针对不同 mime 类型调整 PHP 图像大小

windows - 窗口向左无闪烁扩展(调整大小)

python-3.x - Python 3 Wx 更改托盘图标

python - 迭代 N 个符号的所有 L 长度序列,其中包括所有 N 个符号