Найти - Пользователи
Полная версия: работа с QCompleter. QCompleter для виджетов
Начало » GUI » работа с QCompleter. QCompleter для виджетов
1
r1s
Добрый день. Не могу понять, как назначить QCompleter для стороннего виджета. Есть метод QCompleter.setWidget(QWidget), но что делать дальше не ясно, т.е на какие события он будет появляться, когда исчезать - не понятно. Искал примеры в гугле, но нашел только переопределение QCompleter для QComboBox, в котором есть при вызове QComboBox.setCompleter() QCompleter.setWidget автоматом, а так же определены QComboBox.showPopup() и QComboBox.hidePopup(). В стандартных же виджетах этого нет. Был бы рад и благодарен советам и направлениям куда копать, а еще лучше небольшой пример.
Kyrym
Присоединяюсь к вопросу про 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_())
Kyrym
В топку “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_())
PEHDOM
Kyrym Вы, я смотрю, не ищете легких путей, достаточно почитать документацию, например http://doc.crossplatform.ru/qt/4.4.3/qcompleter.html , чтобы понять что второй аргумент необязателен, это родительский виджет.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB