Запись с предложениями

Я создаю маленькое приложение PyGTK, и у меня есть поле ввода текста (в настоящее время ComboBoxEntry), который заполняется с несколькими значениями, из которых пользователь должен смочь выбрать.

Я думаю, что я хочу сделать, должен отфильтровать поля соответствия и только показать те, таким образом, пользователь, использующий стрелки клавиатуры, может выбрать один из соответствия.

Чтобы дать некоторому фону, предопределенные значения являются набором URL, и пользователь должен смочь выбрать из них или заполнить новый.

Пример: предопределенные URL:

Когда пользователь вводит 'http://www.g', Эти три URL, запускающиеся с той строки, нужно показать (в некотором роде) и когда typeing 'http://www.goog' два запуска с этого нужно показать

Какие-либо идеи?

6
задан Joelbitar 12 February 2010 в 08:35
поделиться

3 ответа

Ввод Entry с EntryCompletion кажется более подходящим, чем ComboBoxEntry. Как всегда, учебник является хорошим началом.

Это очень легко настроить, когда список предопределенных URL невелик и фиксирован. Вам просто нужно заполнить ListStore:

# simplified example from the tutorial
import gtk

urls = [
    'http://www.google.com',
    'http://www.google.com/android',
    'http://www.greatstuff.com',
    'http://www.facebook.com',
    ]
liststore = gtk.ListStore(str)
for s in urls:
    liststore.append([s])

completion = gtk.EntryCompletion()
completion.set_model(liststore)
completion.set_text_column(0)

entry = gtk.Entry()
entry.set_completion(completion)

# boilerplate
window = gtk.Window()
window.add(entry)

window.connect('destroy', lambda w: gtk.main_quit())
window.show_all()
gtk.main()

Пользователи вряд ли будут утруждать себя набором "http://" или даже "www.", поэтому вы, вероятно, захотите найти соответствие любой части URL (например, просто "og" работает!):

def match_anywhere(completion, entrystr, iter, data):
    modelstr = completion.get_model()[iter][0]
    return entrystr in modelstr
completion.set_match_func(match_anywhere, None)

Это будет проверять каждое значение в ListStore на соответствие, поэтому это не масштабируется на огромные списки (я имею в виду огромные; 1000 работает нормально).

Обязательно поиграйте с различными опциями EntryCompletion, чтобы настроить наиболее приятное поведение.

7
ответ дан 17 December 2019 в 00:08
поделиться

Вы можете посмотреть, как это делает Deskbar Applet в Cuemiac.

0
ответ дан 17 December 2019 в 00:08
поделиться

Это все объекты, все время. Ключ заключается в том, связано ли с возвращаемыми объектами поведение. Это прекрасно:

  def read_first_and_last_name(data_source)
    [data_source.read_string, data_source.read_string]
  end

Но в тот момент, когда вы обнаружите, есть поведение, связанное с этими предметами данных...

  def print_name(first_name, last_name)
    puts "#{first_name} #{last_name}"
  end

  def read_and_print_name
    first_name, last_name = read_first_and_last_name(data_source)
    print_name(first_name, last_name)
  end

... тогда они должны быть класс:

  class FullName

    def FullName.read(data_source)
      FullName.new(data_source.read_string, data_source.read_strng)
    end

    def initialize(first_name, last_name)
      @first_name = first_name
      @last_name = last_name
    end

    def print
      puts "#{@first_name} #{@last_name}"
    end

  end

С поведением имени красиво инкапсулированы, использование становится таким же простым, как:

  def read_and_print_name
    FullName.read(data_source).print
  end
-121-3357730-
a:visited:before {
    content: "\00A0\221A";
}

источник

-121--4268383-

Ну, вы, очевидно, хотите иметь дело с префиксами, так что вы, вероятно, хотите использовать какой-то трие. Конечно, есть вопросы, которыми нужно заниматься. Например, после того, как человек наберет несколько букв (или, может быть, даже одну), вы захотите либо пройти через остальные ветви трие, чтобы найти предложения, либо иметь предложения, сохраненные в каждом узле. Многие из таких решений зависят от того, сколько возможных предложений вы планируете иметь.

0
ответ дан 17 December 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: