【发布时间】:2014-06-18 12:06:44
【问题描述】:
我这里有这个类来打开一个从 wx.Frame wxButton 调用的快速 wx.PopupWindow 类
班级:
class popupInfo(wx.PopupWindow):
def __init__(self, *args, **kwargs):
wx.PopupWindow.__init__(self, *args, **kwargs)
panel = wx.Panel(self)
self.panel = panel
panel.SetBackgroundColour("GREY")
st1 = wx.StaticText(panel, -1, finalSemester[0],pos =(10,20))
st2 = wx.StaticText(panel, -1, finalSemester[1],pos =(10,40))
st3 = wx.StaticText(panel, -1, finalSemester[2],pos =(10,60))
st4 = wx.StaticText(panel, -1, finalSemester[3],pos =(10,80))
st5 = wx.StaticText(panel, -1, finalSemester[4],pos =(10,100))
st6 = wx.StaticText(panel, -1, finalSemester[5],pos =(10,120))
st7 = wx.StaticText(panel, -1, finalSemester[6],pos =(10,140))
st8 = wx.StaticText(panel, -1, finalSemester[7],pos =(10,160))
self.SetSize((400, 400))
panel.SetSize((400, 400))
self.Centre()
代码返回我的所有索引列表在任何类之外声明时都超出范围。这是为什么呢?
【问题讨论】:
-
没有看到程序运行期间 finalSemester 是如何声明和/或操作的,我无法告诉你很多信息,除非当这段代码运行时,无论它发现什么,都没有最低限度共 8 个条目。
-
它被声明为一个列表,在两个 wx 类之外,并且在它运行的 wx.Frame 类中为其分配不少于 8 个索引。
-
使用/缺少
global关键字的使用,可能是在应该将条目分配到列表中的函数中?在创建 StaticText 之前尝试print(finalSemester)? -
是的,显然当我通过操作运行它时,它只将它保存到操作内部的 finalSemester1 中。我会将其定义为全局以全局保存内容吗?
-
应尽可能避免使用全局变量,因为它们更难以调试并产生意外行为(如您的示例所示)。我建议要么将其作为此类的父类的实例变量,要么将其作为参数传递给此类。
标签: python list class wxpython