Как превратить Clickable QLineEdit в обычный после первого клика? - PullRequest
0 голосов
/ 10 января 2019

У меня есть интерактивная строка Редактировать:

> class ClickableLineEdit(QtGui.QLineEdit): #This is the Class which let you to have a clickable QLineEdit
      clicked = QtCore.pyqtSignal()
      def mousePressEvent(self, event):
            self.clicked.emit()
            QtGui.QLineEdit.mousePressEvent(self, event)

Который очищает текст по умолчанию после клика:

        self.lineEdit = ClickableLineEdit(Form)
        self.lineEdit.setText(_translate("Form", "0.14286", None)) #Carrying the default value of QLineEdit.
        self.lineEdit.clicked.connect(self.lineEdit_refrac.clear)

Как изменить мой код, чтобы установить нормальное поведение QlineEdit после первого щелчка?

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

Ответы [ 2 ]

0 голосов
/ 10 января 2019

В методе, который вызывается при первом нажатии QLineEdit, вы можете отключить его. Так получается вот так:

self.lineEdit.clicked.connect(self.lineEdit_refrac.clear)

В:

self.lineEdit.clicked.connect(self.clear_line_edit)

def clear_line_edit(self):
    self.lineEdit_refrac.clear() # does what you wanted
    self.lineEdit.clicked.disconnect(self.clear_line_edit) # then ensures the click does not call this method anymore
0 голосов
/ 10 января 2019

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

class LineEdit(QtGui.QLineEdit):
    def __init__(self, *args, **kwargs):
        super(LineEdit, self).__init__(*args, **kwargs)
        self.flag = False

    def mousePressEvent(self, event):
        if not self.flag:
            self.clear()
        self.flag = True
        QtGui.QLineEdit.mousePressEvent(self, event)

# ...

    self.lineEdit = LineEdit(Form)
    self.lineEdit.setText(_translate("Form", "0.14286", None)) #Carrying the default value of QLineEdit.
    # self.lineEdit.clicked.connect(self.lineEdit_refrac.clear)
...