2017-01-15 20 views
-1

Ситуация: Когда я использую кнопку мыши, чтобы щелкнуть «стрелку вниз» ttk.combobox, стандартное поведение - показать выпадающий список. Когда во второй раз нажата стрелка вниз, выпадающий список выпадающих списков станет скрытым.Как скрыть раскрывающийся список ttk.combobox без внешнего стимула

Использование клавиатуры. можно отобразить выпадающий список combobox, нажав «стрелка вниз» один раз. Нажатие «стрелки вниз» далее прокрутит вниз выпадающий список до конца. Повторное нажатие кнопки «стрелка вверх» будет прокручивать раскрывающийся список до тех пор, пока выделение/выбор не достигнет вершины раскрывающегося списка, но в конечном итоге не скроет раскрывающийся список.

Вопрос: Без использования мыши или клавиатуры, то есть с помощью компьютерного программирования, как я могу скрыть раскрывающийся список экспонирования ttk.combobox. Я знаю, что команда w.event_generate("<Down>") может быть использована для программирования ttk.combobox, чтобы показать ее выпадающий список. Но как мне добиться противоположности? То есть, как я могу использовать ту же команду, что и скрытый список? 0. Или какую другую команду tkinter следует использовать для достижения того, чего я хочу?

+0

Может ли кто-нибудь объяснить, почему у меня есть 2 недостающих голоса за мой вопрос? –

ответ

0

Я сделал несколько попыток по этому вопросу и, наконец, нашел способ скрыть дробь combobox с помощью программирования. Мой код показан ниже.

НАБЛЮДЕНИЯ:

  1. Использование "combobox_widget_object.event_generate('<Button-1>')" может вызвать список выпадающий выпадающий показать. Событие '<Button-1>' представляется , по сути определяемым для возникновения такого поведения.
  2. Выполнение 2 этой команды назад не приводит к показу и скрытию выпадающего списка combobox. Он по-прежнему только отображает выпадающий список как с помощью одной команды.
  3. Метод "combobox_widget_object.after(delay_ms, callback=None, *args)" может использоваться для указания функции со списком для запуска функции после определенных временных задержек. Эта функция должна содержать метод
    "combobox_widget_object.event_generate('<Button-1>')", вызывающий скрытие выпадающего списка .

КОД:

# tkinter modules 
import tkinter as tk 
import tkinter.ttk as ttk 

""" 
Aim: 
Create a combobox widget and use w.event_generate(sequence, sequence,**kw) to 
simulate external stimuli to cause combobox dropdown list to show and hide. 

Author: Sun Bear 
Date: 16/01/2017 
""" 

# Function to activate combobox's '<Button-1>' event 
def _source_delayed_clicked(): 
    print ('\n def __source_delayed_clicked():') 
    print('Delayed 2nd simulation of external stimuli') 
    print('HIDE combobox Dropdown list. \n' 
      'IT WORKED!') 
    source.event_generate('<Button-1>') 

root = tk.Tk() 
source_var=tk.StringVar() 
reference=['Peter', 'Scotty', 'Walter', 'Scott', 'Mary', 'Sarah'] 

# Create Main Frame in root 
frame0 = ttk.Frame(root, borderwidth=10, relief=tk.RAISED) 
frame0.grid(row=0, column=0, sticky='nsew') 

# Create Combobox 
source = ttk.Combobox(frame0, textvariable=source_var, values=reference) 
source.grid(row=0, column=0, sticky='nsew') 

# Simulate external stimuli using w.event_generate(sequence,**kw) 
print('\n', '1st simulation of external stimuli using: \n' 
     ' source.event_generate('"<Button-1>"') \n' 
     ' SHOW Combobox Dropdown List.') 
source.event_generate('<Button-1>') 
#source.event_generate('<Button-1>') # running another similar command 
            # back to back didn't work 
delay = 1000*6 # 6 seconds delay 
source.after(delay, _source_delayed_clicked) 

Update: В качестве альтернативы, чтобы скрыть выпадающий список COMBOBOX, команда source.event_generate('<Escape>') может использоваться вместо source.event_generate('<Button-1>') команды, заданной в функции def _source_delayed_clicked(). Это имитирует нажатие клавиши "Esc".