我有一个非常简单的GUI程序用python编写,使用tkinter:
from Tkinter import *
from ttk import Combobox
class TestFrame(Frame):
def __init__(self, root, vehicles):
dropdownVals = ['test', 'reallylongstring', 'etc']
listVals = ['yeaaaah', 'mhm mhm', 'untz untz untz', 'test']
self.dropdown = Combobox(root, values=dropdownVals)
self.dropdown.pack()
listboxPanel = Frame(root)
self.listbox = Listbox(listboxPanel, selectmode=MULTIPLE)
self.listbox.grid(row=0, column=0)
for item in listVals:
self.listbox.insert(END, item) # Add params to list
self.scrollbar = Scrollbar(listboxPanel, orient=VERTICAL)
self.listbox.config(yscrollcommand=self.scrollbar.set) # Connect list to scrollbar
self.scrollbar.config(command=self.listbox.yview) # Connect scrollbar to list
self.scrollbar.grid(row=0, column=1, sticky=N+S)
listboxPanel.pack()
self.b = Button(root, text='Show selected list values', command=self.print_scroll_selected)
self.b.pack()
root.update()
def print_scroll_selected(self):
listboxSel = map(int, self.listbox.curselection()) # Get selections in listbox
print '=========='
for sel in listboxSel:
print self.listbox.get(sel)
print '=========='
print ''
# Create GUI
root = Tk()
win = TestFrame(root, None)
root.mainloop();
GUI如下所示:
点击ListBox
中的几个项目,然后点击按钮。
我得到的输出是预期的:
==========
untz untz untz
==========
==========
yeaaaah
untz untz untz
==========
我现在从ComboBox
中选择一个值,突然ListBox
中的选择消失了。点击按钮显示ListBox中没有选择任何值:
==========
==========
我的问题是:为什么选择ComboBox项清除了ListBox的选择?它们没有任何关联,所以这个bug真的让我很困惑!
答案 0 :(得分:3)
我终于找到了答案。我会在这里留下这个问题以防其他人找到它。
问题不在ComboBox中,而是在ListBox中。如果我使用两个(不相关的)ListBox,这一点就变得清晰了。使用两个列表框时,选择将在焦点更改时清除。
从this question及其接受的答案我发现将exportselection=0
添加到ListBox会禁用导出选择的X选择机制。
从effbot listbox关于X选择机制:selects something in one listbox, and then selects something in another, the original selection disappears.