_tkinter.TclError:错误的列表框索引“”:必须是活动的,锚点,结束,@ x,y或数字

时间:2018-01-31 08:24:57

标签: python python-3.x tkinter

from tkinter import *
window_main = Tk()

def window_open():
    def chgColor(event):
    lst["bg"] = lst.get(lst.curselection())

    window_public = Tk()
    window_public.title("New Page")
    lbl = Label(window_public, text = "Today is a good day and I'm a gooie!")
    lbl.grid(padx = 20, pady = 10)
    var = StringVar()
    lst = Listbox(window_public, height = 5, width = 10, listvariable = var)
    lst.grid(padx = 50, pady = 20)
    list = ["red", "blue", "yellow", "pink", "green", "white", "black"]
    var.set(tuple(list))
    lst.bind("<<ListboxSelect>>", chgColor)
    window_public.mainloop()


window_main.title("Main")
window_main_btn = Button(window_main, text = "To New Page", command = window_open)
window_main_btn.grid(padx = 50, pady = 20)
window_main.mainloop()

错误:

Traceback (most recent call last):
  File "C:\ComputerSoftware\python3.6\lib\tkinter\__init__.py", line 1699, in __call__
    return self.func(*args)
  File "C:/Users/Shawn/PycharmProjects/gammaC@meL/gamma1.py", line 7, in chgColor
    lst["bg"] = lst.get(lst.curselection())
  File "C:\ComputerSoftware\python3.6\lib\tkinter\__init__.py", line 2792, in get
    return self.tk.call(self._w, 'get', first)
_tkinter.TclError: bad listbox index "": must be active, anchor, end, @x,y, or a number

我是python的初学者,遇到了问题。当我点击按钮时,我会转到新页面。然后,当我点击列表框时,我得到一个追溯。我无法理解追溯的含义,无法修复它。
但我发现当我删除关于 window_main 的代码时,它会运行。

3 个答案:

答案 0 :(得分:0)

我不是列表框专家,但我认为现在列表没有填充。您需要将数据插入列表中。而不是var.set(tuple(list)),请使用

for c in list:
    lst.insert(END,c)

如果我改变它,那么它适用于我。

答案 1 :(得分:0)

  • 先插入数据替换:

for index, element in enumerate(list):
    lst.insert(index,element)

  • 你以前是这样的:

    
      def chgColor(event):
          lst["bg"] = lst.get(lst.curselection())
    
      
  • 现在你应该像这样:


    def chgColor(event):
        if lst.curselection() != ():
           lst["bg"] = lst.get(lst.curselection())

    

当 lst.get 收到一个空元组时会发生该错误。

答案 2 :(得分:-1)

我不是Tkinter专家,我知道这不是一个多窗口问题,但你声称你点击一个按钮并进入一个新页面,所以你的问题可能与我要说的内容有关。

我似乎记得有关单个应用程序窗口的内容,然后在用户操作和事件上使用新框架填充该窗口。每个帧都是一个类,然后你会有一些循环,允许你用一个新的框架“刷新”windows内容。

当我found this guy and his videos on youtube时,它确实帮助我学习了Tkinter并克服了新手GUI编程问题(比如多个窗口)。按照他的播放列表,您将立即进行排序。同样表达你对这个家伙的支持也没有什么坏处......所以喜欢他的视频或订阅他的频道。

请包含您在帖子中收到的Traceback错误。这对尝试调试代码的任何人都非常有帮助。 Tkinter Gods也可以告诉你你到底出错的地方。祝你好运!

编辑:好像ViG就在它上面。