Форум сайта python.su
0
Добрый день. Не могу понять, как назначить QCompleter для стороннего виджета. Есть метод QCompleter.setWidget(QWidget), но что делать дальше не ясно, т.е на какие события он будет появляться, когда исчезать - не понятно. Искал примеры в гугле, но нашел только переопределение QCompleter для QComboBox, в котором есть при вызове QComboBox.setCompleter() QCompleter.setWidget автоматом, а так же определены QComboBox.showPopup() и QComboBox.hidePopup(). В стандартных же виджетах этого нет. Был бы рад и благодарен советам и направлениям куда копать, а еще лучше небольшой пример.
Отредактировано (Июнь 9, 2009 19:49:40)
Офлайн
3
Присоединяюсь к вопросу про QCompleter.
Я так понимаю, код должен быть следующий:
arr = [25,28,30,48] completer = QtGui.QCompleter(arr, window) b_Edit.setCompleter(completer)
# 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
В топку “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)
Офлайн
294
Kyrym Вы, я смотрю, не ищете легких путей, достаточно почитать документацию, например http://doc.crossplatform.ru/qt/4.4.3/qcompleter.html , чтобы понять что второй аргумент необязателен, это родительский виджет.
[code python][/code]
Офлайн