2016-11-04 22 views
1

Я пытаюсь использовать QLineEdit для ввода шести чисел с маской ввода, но проблема в том, что когда пользователь щелкает в строке -edit, позиция курсора находится именно там, где вы нажимаете.PySide: перезагрузите курсор pos до 0 при нажатии в QLineEdit с маской ввода

Я изо всех сил стараюсь, чтобы он сместил позицию до начала. Я читал подобные вопросы - и ответы на них - но я не могу заставить его работать (многие из них находятся на C++, а потому, что у меня нет опыта с ним, я не могу реплицировать код в Python).

Мне удалось установить фильтр событий, который распознает, когда пользователь нажимает на QLineEdit, и я могу напечатать позицию курсора, которую пользователь установил при нажатии. Но когда я пытаюсь вручную установить его на 0, это не сработает. Ну, это работает, но только если все приложение, содержащее QLineEdit, теряет фокус, и пользователь возвращается к нему. Таким образом, я ищу способ обновить/перекрасить все приложение внутри класса Filter.

class Filter(QObject): 
    def eventFilter(self, widget, event): 
     # FocusIn event 
     if event.type() == QEvent.FocusIn: 
      print 'focus in' 
      widget.setCursorPosition(0) 
      return False 

     else: 
      return False 

Это устанавливает позицию курсора в 0, но в реальном приложении она показывает только, когда я Alt + Tab или все окно теряет и получает фокус снова. Ручная перерисовка()/update() виджета/окна ничего не делает.

ответ

0

Я думаю, что правильное поведение должно состоять в том, чтобы всегда помещать курсор в начало, если строка редактирования пуста. В противном случае он должен идти туда, куда пользователь нажимает, потому что они, вероятно, хотят редактировать конкретный символ в этой позиции.

Вот простая демонстрация, которая реализует следующее:

import sys 
from PySide import QtCore, QtGui 

class Window(QtGui.QWidget): 
    def __init__(self): 
     super(Window, self).__init__() 
     layout = QtGui.QVBoxLayout(self) 
     while layout.count() < 2: 
      edit = QtGui.QLineEdit(self) 
      edit.setInputMask('999999') 
      edit.installEventFilter(self) 
      layout.addWidget(edit) 

    def eventFilter(self, source, event): 
     if event.type() == QtCore.QEvent.MouseButtonPress: 
      if not len(source.text()): 
       source.home(False) 
       return True 
     return super(Window, self).eventFilter(source, event) 

if __name__ == '__main__': 

    app = QtGui.QApplication(sys.argv) 
    window = Window() 
    window.show() 
    sys.exit(app.exec_()) 

 Смежные вопросы

  • Нет связанных вопросов^_^