【发布时间】:2020-12-16 00:26:07
【问题描述】:
TLDR FIX:将您的对象(或对象列表)放入字典中
简单地说,我在 wxpython 笔记本中动态地创建了一堆页面,并且在每个页面上我都放置了更多的小部件和大小调整器等。我的问题是,如果我想在创建页面时访问 for 循环中设置的变量,我无法访问,因为一旦 for 循环再次运行,该变量将被重置并用于填充新页面。
类似的东西
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.SetSize((400, 300))
self.notebook_1 = wx.Notebook(self, wx.ID_ANY)
self.text_button = wx.Button(self, wx.ID_ANY, "get text")
self.Bind(wx.EVT_BUTTON, self.get_text_handler, self.text_button)
self.__set_properties()
sizer_1 = wx.BoxSizer(wx.VERTICAL)
sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
sizer_1.Add(self.text_button, 0, 0, 0)
sizer_1.Add(self.notebook_1, 1, wx.EXPAND, 0)
self.SetSizer(sizer_1)
self.Layout()
numlist = (1, 2, 3, 4)
#global page_dictionary
#page_dictionary = {}
for i in numlist:
self.notebook_1_pane_2 = wx.Panel(self.notebook_1, wx.ID_ANY)
self.notebook_1_pane_2.SetSizer(sizer_2)
self.notebook_1.AddPage(self.notebook_1_pane_2, str(i))
self.label_1 = wx.TextCtrl(self.notebook_1_pane_2, wx.ID_ANY, str(i))
sizer_2.Add(self.label_1, 0, 0, 0)
self.Layout()
#page_k = self.label_1.GetValue()
#page_k_good = page_k + str(i)
#page_dictionary[page_k_good] = i
#print(page_dictionary)
def __set_properties(self):
self.SetTitle("frame")
def get_text_handler(self, event): # wxGlade: MyFrame.<event_handler>
print(self.label_1.GetValue())
这与我实际运行的唯一区别是 numlist 变量实际上是动态生成随机数量的值
我的问题是,如果我想引用我在前几页中设置的任何标签,我不能因为 self.label_1 变量被重置为最后一页上的条目。所以如果我想访问第 1 页上的标签,标签变量设置为在 for 循环中创建的最后一页的值。就像一旦标签被放置并填充到 wxNotebook 页面上,它就消失了,并且该小部件中的内容不再可访问。
那么,例如,当 self.label_1 被重写以匹配生成的最后一页中的标签时,我将如何在笔记本中的第 1 页打印(self.label_1)?
在搞乱字典,所以我把它注释掉了。 我如何能够单击该按钮,并让它从当前页面的框中获取文本?
希望最终编辑:
我将如何将多个对象分配到字典中?我是否需要将值 i 分配为列表 (label_1, Label_2) 然后当需要调用它们的方法时只需从列表中引用它们,即现在在字典中?
是的,做到了,将它们作为列表放入字典中,需要时可以拉出列表。
【问题讨论】:
-
根据我认为您所说的您正在使用 for 循环在笔记本中动态创建一系列页面。在每个页面上,您都放置了许多小部件。您的问题是,在完成特定页面的循环后,您无法再引用该页面的内容,因为 number 现在引用了不同的页面。请编辑您的问题以显示最小的可重复集。请参阅Minimal Reproducible Example,了解如何最好地帮助我们。
-
这是我第一次搞砸这样的事情,我什至不知道如何开始去做。有没有办法在生成时将变量 i 添加到变量名中?所以 self.label_1 将成为 self.label_1(i) 并最终成为 self.label_11、self.label_12、self.label13 等,这样我可以在生成后轻松引用它们?
标签: python-3.x dynamic wxpython