Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Выпадающий список QtGui.QComboBox(self) [RSS Feed]

#1 Сен. 26, 2014 15:44:11

xenon
От:
Зарегистрирован: 2010-12-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Выпадающий список QtGui.QComboBox(self)

Здрасте, уважаемые Гуру Питона! Вопрос по PyQt.
Подскажите пожалуйста опцию, позволяющую при вводе текста в поле - QtGui.QComboBox(self) и нажатии на стрелке справа, чтобы выпадающий список начинался или оказывался “рядом” с введенным текстом, т.е. максимально близким совпадением.
Непонятно описал проблему ((
Вот пример: есть список фамилий: Иванов, Петров, Сидоров - они находятся в списке. Я ввожу начальные буквы фамилии “Иванов”, типа - “Ива” и щелкаю на стрелке справа, то указатель должен предложить мне в первую очередь фамилию “Иванов” для заполнения. По умолчанию, если я щелкаю на стрелке справа, то выпадающий список начинается сначала ((
Чтоб не прослыть полным лентяем-трутнем привожу кусок своего кода по добавлению виджетов и настройке некоторых опций.

Заранее большое спасибо!

        i = 0
        for j in self.names_label:
            self.label[i] =  QtGui.QLabel( j )
            grid.addWidget(self.label[i],pos_label[i][0],pos_label[i][1])
            
            self.combo[i] = QtGui.QComboBox(self)
            grid.addWidget(self.combo[i],pos_label[i][0],pos_label[i][1]+1, 1, 3)
            self.combo[i].setEditable(True)
            if i >= 1 :
                self.combo[i].setInsertPolicy (0)
            self.combo[i].setMaxVisibleItems(5)
            i += 1



Мыши плакали, кололись, но продолжали жрать кактус …

Офлайн

#2 Сен. 26, 2014 21:27:41

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

Выпадающий список QtGui.QComboBox(self)

вот такое наколдовал

import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.names = [u"Петров", u"Сидоров", u"Иванов", u"Ивановa"]
        self.index_old = 0
        self.index_cur = 0
        self.combo = QtGui.QComboBox(self)
        self.combo.setEditable(True)
        self.comp = QtGui.QCompleter(self.completer)
        #self.combo.setCompleter(self.comp)
        self.combo.editTextChanged.connect(self.text_ch)
        self.add_names()
    @property
    def completer(self):
        completerList = QtCore.QStringList()
        for name in self.names:
            completerList.append(QtCore.QString(name))
        return completerList
    def add_names(self):
        for name in self.names:
            self.combo.addItem(name)
    def text_ch(self, s):
        name = unicode(s)
        self.combo.setEditText(name.capitalize())
        try:
            self.index_cur = self.names.index(name)
        except:
            pass
        else:
            if self.index_cur != self.index_old:
                self.combo.setCurrentIndex(self.index_cur)
            self.index_old = self.index_cur
def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())
if __name__ == '__main__':
    main()

оно то работает но наверняка есть какой-то Правильный способ

Отредактировано vrabey (Сен. 27, 2014 11:37:25)

Офлайн

#3 Окт. 2, 2014 10:28:41

xenon
От:
Зарегистрирован: 2010-12-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Выпадающий список QtGui.QComboBox(self)

vrabey
вот такое наколдовал
Большое спасибо за предложенное решение!
Буду разбираться в выложенном коде!
оно то работает но наверняка есть какой-то Правильный способ
- вот и я думал, что есть готовое решение данной задачи, но если никто больше не откликнулся, возможно его и нет (((



Мыши плакали, кололись, но продолжали жрать кактус …

Офлайн

#4 Окт. 2, 2014 20:56:07

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

Выпадающий список QtGui.QComboBox(self)

> оно то работает но наверняка есть какой-то Правильный способ
> вот и я думал, что есть готовое решение данной задачи, но если никто больше не откликнулся, возможно его и нет (((

Его прость не может не быть… Оно где-то есть… Ой да вот же оно!

self.combo.editTextChanged.connect(self.combo.findText)



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Окт. 2, 2014 21:02:53)

Офлайн

#5 Окт. 2, 2014 21:15:56

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

Выпадающий список QtGui.QComboBox(self)

Rodegast
self.combo.editTextChanged.connect(self.combo.findText)
а можете объяснить что делает эта строчка?
вернее как её использовать для решения задачи:
xenon
ввожу начальные буквы фамилии “Иванов”, типа - “Ива” и щелкаю на стрелке справа, то указатель должен предложить мне в первую очередь фамилию “Иванов” для заполнения
хочется разобраться

Офлайн

#6 Окт. 2, 2014 22:44:11

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

Выпадающий список QtGui.QComboBox(self)

> вернее как её использовать для решения задачи

Я думал что вы сами с таким разберётесь.

import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.combo = QtGui.QComboBox(self)
        self.combo.setEditable(True)
        self.combo.editTextChanged.connect(self.combo.findText)
        self.combo.addItems([u"Петров", u"Сидоров", u"Иванов", u"Ивановa"])
if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Окт. 2, 2014 22:58:30

xenon
От:
Зарегистрирован: 2010-12-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Выпадающий список QtGui.QComboBox(self)

Его прость не может не быть… Оно где-то есть… Ой да вот же оно!
- Большое спасибо за решение!!!
Вот только смущает поведение - срабатывает со второго раза, т.е.: при вводе текста “Ива” и щелчке на стрелку - указатель предлагает выбрать первое значение из списка (т.е. “Петров”), а если щелкнуть второй раз на стрелку - то все в норме, указатель предлагает выбрать именно “ближайшее” значение - “Иванов”.



Мыши плакали, кололись, но продолжали жрать кактус …

Отредактировано xenon (Окт. 2, 2014 22:59:21)

Офлайн

#8 Окт. 2, 2014 23:27:00

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2757
Репутация: +  184  -
Профиль   Отправить e-mail  

Выпадающий список QtGui.QComboBox(self)

> Вот только смущает поведение - срабатывает со второго раза

Вот вариант который будет работать с первого раза.

import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.combo = QtGui.QComboBox(self)
        self.combo.setEditable(True)
        self.combo.editTextChanged.connect(self.findText)
        self.combo.addItems([u"Петров", u"Сидоров", u"Иванов", u"Ивановa"])
    def findText(self, s):
        index=self.combo.findText(s)
        if index > -1:
            self.combo.setCurrentIndex(index)
if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Окт. 2, 2014 23:27:22)

Офлайн

#9 Окт. 2, 2014 23:39:04

xenon
От:
Зарегистрирован: 2010-12-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Выпадающий список QtGui.QComboBox(self)

Вот вариант который будет работать с первого раза.
- Да, спасибо большое! Все отлично!



Мыши плакали, кололись, но продолжали жрать кактус …

Офлайн

  • Начало
  • » GUI
  • » Выпадающий список QtGui.QComboBox(self)[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version