22
from Tkinter import *


master = Tk()

listbox = Listbox(master)
listbox.pack()
listbox.insert(END, "a list entry")

for item in ["one", "two", "three", "four"]:
    listbox.insert(END, item)

listbox2 = Listbox(master)
listbox2.pack()
listbox2.insert(END, "a list entry")

for item in ["one", "two", "three", "four"]:
    listbox2.insert(END, item)

master.mainloop()

上記のコードは、tkinter2 つのリストボックスを含むウィンドウを作成します。ただし、両方から値を取得したい場合は問題があります。一方の値を選択するとすぐに、もう一方の選択が解除されるためです。

これは、開発者が耐えなければならない単なる制限ですか?

4

2 に答える 2

44

簡単な答え:すべてのリストボックスウィジェットの属性の値exportselectionをFalseまたはゼロに設定します。

リストボックスウィジェットのpythonwareの概要から:

デフォルトでは、選択はX選択メカニズムにエクスポートされます。画面に複数のリストボックスがある場合、これは貧しいユーザーにとって本当に混乱します。彼が1つのリストボックスで何かを選択してから、別のリストボックスで何かを選択すると、元の選択がクリアされます。このような場合は、通常、このメカニズムを無効にすることをお勧めします。次の例では、3つのリストボックスが同じダイアログで使用されています。

b1 = Listbox(exportselection=0)
for item in families:
    b1.insert(END, item)

b2 = Listbox(exportselection=0)
for item in fonts:
    b2.insert(END, item)

b3 = Listbox(exportselection=0)
for item in styles:
    b3.insert(END, item)

tkウィジェットの最も信頼のおけるドキュメントは、PythonではなくTcl言語に基づいていますが、Pythonに簡単に翻訳できます。このexportselection属性は、標準オプションのマニュアルページにあります。

于 2009-04-16T16:11:42.537 に答える
8

exportselection=0リストボックスを定義すると、この問題が解決されるようです。

于 2009-04-16T16:01:56.647 に答える