首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在FlexGridSizer中更新StaticText或使其适合对话框

无法在FlexGridSizer中更新StaticText或使其适合对话框
EN

Stack Overflow用户
提问于 2018-01-27 07:39:17
回答 1查看 100关注 0票数 0

我正在尝试创建一个自定义对话框,其中包含隐藏的用户名和密码TextCtrls,并替换为FlexGridSizer中的一些帐户信息。有一个垂直的BoxSizer,包含一个面板和一些按钮。面板本身有一个垂直的BoxSizer,其中填充了几个水平BoxSizers和FlexGridSizer。

代码语言:javascript
复制
self.panel = wx.Panel(self)
self.vbox = wx.BoxSizer(wx.VERTICAL)
self.infoBox = wx.BoxSizer(wx.VERTICAL)

然后像这样放在一起:

代码语言:javascript
复制
self.panel.SetSizer(self.infoBox)
self.vbox.Add(self.panel, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
self.vbox.Add(self.butBox,
                  flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, border=10)
self.SetSizer(self.vbox)

FlexGridSizer如下所示:

代码语言:javascript
复制
self.acctBox = wx.FlexGridSizer(5, 2, 5, 5)
self.userName = wx.StaticText(self.panel, label='Username:')
self.userNameData = wx.StaticText(self.panel)
self.acctType = wx.StaticText(self.panel, label='Account Type:')
self.acctTypeData = wx.StaticText(self.panel)
self.uploadLimit = wx.StaticText(self.panel, label='Upload Limit:')
self.uploadLimitData = wx.StaticText(self.panel)
self.uploaded = wx.StaticText(self.panel, label='Uploaded in Period:')
self.uploadedData = wx.StaticText(self.panel)
self.cycleExp = wx.StaticText(self.panel, label='Cycle Expiration:')
self.cycleExpData = wx.StaticText(self.panel)
self.acctBox.AddMany([self.userName, self.userNameData,
                     self.acctType, self.acctTypeData,
                     self.uploadLimit, self.uploadLimitData,
                     self.uploaded, self.uploadedData,
                     self.cycleExp, self.cycleExpData])
self.infoBox.Add(self.acctBox, proportion=1,
              flag=wx.EXPAND | wx.ALL, border=10)
self.infoBox.Hide(self.acctBox, recursive=True)

一开始看起来还不错:

但当我更新StaticTexts时:

代码语言:javascript
复制
self.infoBox.Hide(self.userBox)
self.infoBox.Hide(self.passBox)

self.userNameData = self.conn.publicUserInfo.username
self.acctTypeData = self.PrivledgeLevel(self.conn.user.privilege)
self.uploadLimitData = self.conn.accountLimits.uploadLimit
self.uploadedData = self.conn.syncState.uploaded
self.cycleExpData = self.conn.premiumInfo.premiumExpirationDate

self.infoBox.Show(self.acctBox)
# self.infoBox.Fit(self)
self.infoBox.Layout()
self.connStat.SetLabel('Connected')

什么都不会更新,FlexGridSizer的底部会被切断:

如果我加上self.infoBox.Fit(self),它看起来更糟:

为了让StaticTexts更新,我在这里遗漏了什么?我已经签入了调试器,并且变量具有这些值。它们只是没有被展示出来。如何在不调用Fit和调整大小的情况下,使对话框的大小从一开始就适合所有内容?硬编码对话框大小是唯一的方法吗?或者有没有一种动态的方法呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-27 09:13:25

实际上,您并没有设置静态文本。您正在将它们在类实例上的名称重新指定为其他名称(字符串)。静态文本不会被垃圾收集器清除的唯一原因是,它们仍然被包含它们的sizers引用。

为了实际更改它们的文本,您需要设置它们的标签。例如,对于userData,您希望调用self.userNameData.SetLabel(self.conn.publicUserInfo.username)

这里有关于设置标签here in the documentation的额外信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48471091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档