1

何らかの理由で、リストボックスに、スペースで終わる文字列が角かっこで囲まれているようです。

from Tkinter import *

def update_listbox():   
    for i in dic:
        listbox.insert(END, (i, dic[i][0], dic[i][1], dic[i][2]))

dic = {}
dic['Foods'] = ['apple','grape','pizza']
dic['Drinks      '] = ['milk','soda','jucie'] # How do i make the {} not show up but keep the spaces?

root=Tk()
listbox = Listbox(root)
button = Button(root,text='push',command=update_listbox)
button.pack()
listbox.pack()


root.mainloop()
4

1 に答える 1

5

1つ以上の文字列ではなく、タプル要素をリストボックスに挿入することに関係があると思います。代わりにこれを試してください:

listbox.insert(END, ' '.join([i]+dic[i])

これは、キーとすべてのサブ要素を 1 つの文字列に連結し、それらすべてを 1 行にまとめて、その 1 つをリストボックスに挿入します。ボタンを押した後、私のシステムでは次のように表示されます。

括弧が挿入されていないリストボックス

もう 1 つの方法は、呼び出しでタプルをアンパックすることです。

listbox.insert(END, *(i, dic[i][0], dic[i][1], dic[i][2]))

または、最初からそれらをタプルに入れないほうがよいでしょう:

listbox.insert(END, i, dic[i][0], dic[i][1], dic[i][2])

しかし、それよりもさらに良いのは、任意の長さのリストを処理できるため (コメントで @mgilson が指摘したように)、次のように記述することです。

listbox.insert(END, i, *dic[i])

とにかく、結果は次のようになります。

各単語を別々の行に挿入した括弧のない別のリストボックス

更新後にリストボックスの幅が自動的に更新されるようにする方法を次に示します。また、辞書を作成し、後でリストボックスに入力するときにその内容を反復処理する別の方法も示しています。

from Tkinter import *

def update_listbox():
    longest = 20  # initial value acts as minimum width
    for key,value in dic.iteritems():
        entry = '{}: {}'.format(key, (', '.join(value)))
        longest = max(longest, len(entry))
        listbox.insert(END, entry)
    listbox.config(width=longest)  # width in "standard" or average characters

dic = {
    'Foods': ['apple','grape','pizza'],
    'Drinks': ['milk','soda','juice'],
}

root=Tk()
root.title('Listbox')
listbox = Listbox(root)
button = Button(root, text='push', command=update_listbox)
button.pack()
listbox.pack()

root.mainloop()

この結果:

リストボックス最終版

ところで、ここに良いオンライン Tkinter リファレンスがあります。

于 2012-07-11T08:26:22.333 に答える