【问题标题】:wxPython wx.TextCtrl dynamically resizing to fill panel widthwxPython wx.TextCtrl 动态调整大小以填充面板宽度
【发布时间】:2013-12-22 19:54:16
【问题描述】:

我希望wx.TextCtrl 占据面板的整个剩余宽度。它与wx.StaticTextwx.Button 一起放置在水平wx.BoxSizer 中,垂直wx.BoxSizerwx.lib.scrolledpanel.ScrolledPanel 中(下面是self):

# create TextCtrl
self.fileNameInput = wx.TextCtrl (self, style=wx.TE_PROCESS_ENTER)
# create horizontal sizer with 3 items
self.fileNameSizer = wx.BoxSizer (wx.HORIZONTAL)
self.fileNameSizer.Add (wx.StaticText (self, -1, 'none'), flag=(wx.ALIGN_CENTER_VERTICAL))
self.fileNameSizer.Add (self.fileNameInput, proportion=1, flag=(wx.EXPAND | wx.ALIGN_CENTER_VERTICAL))
self.fileNameSizer.Add (wx.Button (self, label='Button'), flag=(wx.ALIGN_CENTER_VERTICAL))
# create vertical sizer
self.SetSizer (wx.BoxSizer (wx.VERTICAL))
self.GetSizer ().Add (self.fileNameSizer)

proportionwx.EXPAND 都不能帮助使 TextCtrl 更大,大概是因为 sizer 会查看 TextCtrls 自身的宽度。但是我没有找到任何样式或标志来让''TextCtrl'变成可变宽度..?

感谢您的想法!

编辑: 将“...”替换为有效的东西

【问题讨论】:

  • 如果您让人们更轻松,您将获得更多答案。如果您发布了一个可以实际运行的独立的最小示例,这将更容易回答。我想我知道出了什么问题,但我不想在检查之前发布答案,而且我不会花所有时间替换“...”等。
  • @tom10:感谢您如此透彻,但我想把无趣的东西放在外面,并假设如果我从认为他知道哪里错的人那里得到提示,我就能弄清楚细节。 .. :-|无论如何,我更换了 ...s
  • 如果您创建自包含的最小可运行示例来演示该问题,这将非常有帮助。类似于我的回答。

标签: wxpython width textctrl


【解决方案1】:

我认为这行有什么问题:

self.GetSizer().Add(self.fileNameSizer)

应该有一些proportion=1 和/或flag=wx.EXPAND 以使嵌套的sizer 与其主尺寸相匹配。

类似这样的:

import wx

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.panel = wx.Panel(self)

        self.label = wx.StaticText(self.panel, label="Label")
        self.text = wx.TextCtrl(self.panel)
        self.button = wx.Button(self.panel, label="Test")

        self.button1 = wx.Button(self.panel, label="ABOVE")
        self.button2 = wx.Button(self.panel, label="BELLOW")

        self.horizontal = wx.BoxSizer()
        self.horizontal.Add(self.label, flag=wx.CENTER)
        self.horizontal.Add(self.text, proportion=1, flag=wx.CENTER)
        self.horizontal.Add(self.button, flag=wx.CENTER)

        self.vertical = wx.BoxSizer(wx.VERTICAL)
        self.vertical.Add(self.button1, flag=wx.EXPAND)
        self.vertical.Add(self.horizontal, proportion=1, flag=wx.EXPAND)
        self.vertical.Add(self.button2, flag=wx.EXPAND)

        self.panel.SetSizerAndFit(self.vertical)  
        self.Show()


app = wx.App(False)
win = MainWindow(None)
app.MainLoop()

顺便说一句:请停止在方法调用中 ( 之前添加空格。另外我会推荐面向对象的方法,这样您就不会失去对 GUI 对象的访问权限。

【讨论】:

  • 非常感谢 - 我看错了sizer……真傻。是的,我确实已经听从了你的 OO 建议,但我为什么要把 function 和 ( 放在一起(我的意思是除了风格)?
  • 只是为了风格。这是一个常见的约定。使用了几种样式,但这太奇怪了,难以阅读。
  • 好吧,我会试试的。 :-) 感谢背景!
猜你喜欢
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 2010-12-07
  • 2011-05-21
相关资源
最近更新 更多