【问题标题】:wxPython PopupWindow, list out of range when in rangewxPython PopupWindow,在范围内时列出超出范围
【发布时间】: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


【解决方案1】:

如果您的 finalSemester 数组超出了您的函数范围,python 预计您正在创建一个本地数组,并且您不能以这种方式添加元素。

你可以使用全局,但你最好只传递你的数组 作为初始化器的参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2023-03-27
    • 2012-05-04
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多