ValueError:解压缩Tkinter Listbox的值太多

时间:2015-02-25 14:02:31

标签: python dictionary tkinter listbox

当编写一个简单的程序,使用Tkinter将字典中的值和键输出到python中的列表框时,我收到以下错误:

    for key, value in mydict.itervalues():
ValueError: too many values to unpack

请参阅下面的代码:

#!/usr/bin/python

import Tkinter as tk


mydict = {"0x00063":"6F 7D 9E 0E FF FF FF FF", 
          "0x00061":"FF FF FF FF FF FF FF FF", 
          "0x00062":"AA AA AA AA AA AA AA AA", 
          "0x00064":"00 00 00 00 00 00 00 00"}

guiMain = tk.Tk()
recvDisplay = tk.Listbox(guiMain)

for key, value in mydict.itervalues():
    recvDisplay.insert(key, value)

recvButton = tk.Button(guiMain, text="Start Receive")
tranDisplay = tk.Listbox(guiMain)
tranButton = tk.Button(guiMain, text="Start Transmit")
recvDisplay.pack()
recvButton.pack()
tranDisplay.pack()
tranButton.pack()
guiMain.mainloop()

我需要能够将字典中的值和键输出到列表框recvDisplay,但我需要列表框自动刷新,以便显示对字典的任何更改。

2 个答案:

答案 0 :(得分:3)

mydict.itervalues()mydict中值的迭代器。如果您想要密钥和值,请使用mydict.iteritems()

for key, value in mydict.iteritems():
    recvDisplay.insert(tk.END, '{}, {}'.format(key, value))

注意:列表框只有一列。如果您希望多列分别显示键和值,则需要使用其他窗口小部件,例如treectrl.MultiListbox,或者并排放置两个Listboxes

答案 1 :(得分:1)

  1. itervalues():在字典的值上返回一个迭代器。
  2. e.g。

    >>> d = {"a":1, "b":2}
    >>> d.itervalues()
    <dictionary-valueiterator object at 0xb7201144>
    >>> for i in d.itervalues():
    ...   print i, type(i)
    ... 
    1 <type 'int'>
    2 <type 'int'>
    >>> 
    
    1. items():返回字典的(键,值)对列表的副本。
    2. 列表项
    3. e.g。

      >>> d.items()
      [('a', 1), ('b', 2)]
      
      1. iteritems():在字典的(键,值)对上返回一个迭代器。
      2. e.g。

        >>> for i, j in d.iteritems():
        ...   i , j
        ... 
        ('a', 1)
        ('b', 2)
        >>> 
        

        more details