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