Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » работа с QCompleter. QCompleter для виджетов [RSS Feed]

#1 Июнь 9, 2009 19:48:45

r1s
От:
Зарегистрирован: 2008-09-21
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

работа с QCompleter. QCompleter для виджетов

Добрый день. Не могу понять, как назначить QCompleter для стороннего виджета. Есть метод QCompleter.setWidget(QWidget), но что делать дальше не ясно, т.е на какие события он будет появляться, когда исчезать - не понятно. Искал примеры в гугле, но нашел только переопределение QCompleter для QComboBox, в котором есть при вызове QComboBox.setCompleter() QCompleter.setWidget автоматом, а так же определены QComboBox.showPopup() и QComboBox.hidePopup(). В стандартных же виджетах этого нет. Был бы рад и благодарен советам и направлениям куда копать, а еще лучше небольшой пример.



Отредактировано (Июнь 9, 2009 19:49:40)

Офлайн

#2 Янв. 16, 2017 09:01:40

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

работа с QCompleter. QCompleter для виджетов

Присоединяюсь к вопросу про QCompleter.
Я так понимаю, код должен быть следующий:

 arr = [25,28,30,48]
 completer = QtGui.QCompleter(arr, window)
b_Edit.setCompleter(completer)
Но что здесь такое “window”? Это по Прохорёнку.

Весь код программы:
 # Python 3. PyQt4
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui, QtCore
# Графика
class Window(QtGui.QWidget): # Класс Window  наследует класс QWidget
    def __init__(self, parent=None): # Создаёт конструктор класса, parent - ссылка на родительский эл-т
        QtGui.QWidget.__init__(self, parent)
        
        self.setMinimumSize(300, 400) # Миниамльная ширина и высота окна
        self.setWindowTitle('Программа') # Заголовок
        self.setWindowIcon(QtGui.QIcon('RP\icon.png')) # Иконка 
        # self.statusBar() - не работает
        # Блок именования полей. В столбец 1
        a = QtGui.QLabel('Длина a =')
        b = QtGui.QLabel('Ширина b =')
        h = QtGui.QLabel('Высота h =')
        Viv = QtGui.QLabel('Расчёт')
        Vv = QtGui.QLabel('Ввод')
        button1 = QtGui.QPushButton('Ввести') # Отправка сообщений программе для поля Vv
        # Блок создания полей. В столбец 2
        a_Edit = QtGui.QLineEdit()
        b_Edit = QtGui.QLineEdit()
        h_Edit = QtGui.QLineEdit()
        # Vv_Edit = QtGui.QTextEdit()
        Vv_Edit = QtGui.QLineEdit() # Для ответов на вопросы программы + команды
        Viv_Obl = QtGui.QScrollArea() # Показывает ход вычислений
        # Расширение всойств полей
          # Варианты значений
        arr = [25,28,30,48]
        completer = QtGui.QCompleter(arr, window)
        b_Edit.setCompleter(completer)
        # Блок разметки
        grid = QtGui.QGridLayout() # создание сетки
        grid.setSpacing(10) # ????
        grid.addWidget(a, 1, 0)
        grid.addWidget(a_Edit, 1, 1)
                
        grid.addWidget(b, 2, 0)
        grid.addWidget(b_Edit, 2, 1)
        grid.addWidget(h, 3, 0)
        grid.addWidget(h_Edit, 3, 1)
        grid.addWidget(Viv, 4, 0)
        grid.addWidget(Viv_Obl, 4, 1, 1, 2)
        grid.addWidget(Vv, 5, 0)
        grid.addWidget(Vv_Edit, 5, 1, 1, 1) # компонент, стр, стлб, кол стр, кол стлб
        grid.addWidget(button1, 5, 2)
            
        self.setLayout(grid) # ????
        self.resize(150, 100) # ????
# Концовка       
app = QtGui.QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())

Офлайн

#3 Июль 14, 2017 20:19:48

Kyrym
Зарегистрирован: 2016-12-28
Сообщения: 225
Репутация: +  3  -
Профиль   Отправить e-mail  

работа с QCompleter. QCompleter для виджетов

В топку “window”. Не знаю зачем это, но без него всё прекрасно работает. Короче так:

 arr = [25,28,30,48]
completer = QtGui.QCompleter(arr)
b_Edit.setCompleter(completer)

Можно посмотреть вот этот код:
 # Python 3. PyQt4
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui, QtCore
db = ['апельсины', 'арбузы', 'дыни', 'капуста', 'лимоны', 'морковь', 'сливы', 'яблоки']
# ГРАФИКА
class Window(QtGui.QWidget): # Класс Window  наследует класс QWidget
    def __init__(self, parent=None): # Создаёт конструктор класса, parent - ссылка на родительский эл-т
        QtGui.QWidget.__init__(self, parent)
        self.resize(200, 100) # шир / выс окна         
        # БЛОК РАЗМЕТКИ
        self.vbox = QtGui.QVBoxLayout()
        # ---
        self.pole_1 = QtGui.QLineEdit()
        # --- ---
        cmpl = QtGui.QCompleter(db)
        # --- ---
        self.pole_1.setCompleter(cmpl)
        self.vbox.addWidget(self.pole_1)
        # ---
        self.box = QtGui.QComboBox()
        self.box.addItems(db)
        #self.box.setAutoCompletion(True) # вар 1        
        self.box.setCompleter(cmpl) # вар 2
        self.vbox.addWidget(self.box)
        # ---
        self.lbl = QtGui.QLabel()
        self.vbox.addWidget(self.lbl)        
        # ---
        self.setLayout(self.vbox)
    # ЛОГИКА
    
# КОНЕЦ
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = Window() # создаёт экземпляр окна из класса   
    window.show() # запускает окно
    sys.exit(app.exec_())

Отредактировано Kyrym (Июль 14, 2017 20:21:36)

Офлайн

#4 Июль 14, 2017 21:44:23

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

работа с QCompleter. QCompleter для виджетов

Kyrym Вы, я смотрю, не ищете легких путей, достаточно почитать документацию, например http://doc.crossplatform.ru/qt/4.4.3/qcompleter.html , чтобы понять что второй аргумент необязателен, это родительский виджет.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

  • Начало
  • » GUI
  • » работа с QCompleter. QCompleter для виджетов[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version