2014-01-13 4 views
0

Я искал всюду, но не смог найти пример при запуске слота/события, когда текст вставлен в PyQt4 QLineEdit?PyQt QLineEdit и «вставить» событие?

+0

В Qt отсутствует сигнал или событие пасты. Вы можете использовать сигнал 'textChanged' и проверить, совпадает ли новый контент с содержимым буфера обмена, используя класс' QClipboard'. –

ответ

1

Добавьте следующий код в ваш MyForm класс:

Внутри __init__()

self.ui.lineEdit_URL.textChanged.connect(self.valueChanged) 

Определить новый метод:

def valueChanged(self, text): 
    if QtGui.QApplication.clipboard().text() == text: 
     self.pasteEvent(text) 

Определите другой метод:

def pasteEvent(self, text): 
    # this is your paste event, whenever any text is pasted in the 
    # 'lineEdit_URL', this method gets called. 
    # 'text' is the newly pasted text. 

    print text 
+0

FWIW, мне кажется, что этот 'pasteEvent' будет вызываться всякий раз, когда текст редактирования строки * изменяется * (например, нажатие клавиши). Это совсем не так, как только вызывается, когда текстовые * вставлены *, что я интерпретирую вопрос OP. – joxl

+0

Вы должны внимательно прочитать метод valueChanged. – qurban

+0

Я стою исправлены. Тем не менее, 'pasteEvent' по-прежнему будет вызван, если так получится, что текст виджета точно соответствует буферам обмена. Однако это не обязательно означает, что текст появился там, потому что он был вставлен. Хотя, возможно, это не имеет значения для вашего случая использования. – joxl

1

Вам необходимо определить его самостоятельно, переопределив «keyPressEvent». Для примера:

from PyQt4 import QtGui, QtCore 
import sys 

class NoteText(QtGui.QLineEdit): 
    def __init__(self, parent): 
     super (NoteText, self).__init__(parent) 

    def keyPressEvent(self, event): 
     if event.matches(QtGui.QKeySequence.Paste): 
      self.setText("Bye") 

class Test(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(Test, self).__init__(parent) 

     le = QtGui.QLineEdit() 
     nt = NoteText(le) 

     layout = QtGui.QHBoxLayout() 
     layout.addWidget(nt) 
     self.setLayout(layout) 

app = QtGui.QApplication(sys.argv) 
myWidget = Test() 
myWidget.show() 
app.exec_() 
+0

Я импортировать пользовательский интерфейс из другого файла в качестве 'класса MyForm (QtGui.QMainWindow): Защиту __init __ (я, родитель = None): QtGui.QWidget .__ INIT __ (я, родитель) self.ui = Ui_MainWindow() self.ui.setupUi (самостоятельно) self.threads = [] self.ui.pushButton_Start.clicked.connect (self.thread_start) 'вы можете использовать PLS. напишите приветливый пример для этого? – Stacked

+0

Что-то вроде 'self.ui.lineEdit_URL.textChanged.connect (self.KeyDown) def KeyDown (self, event): # реализовать метод здесь if event.matches (QtGui.QKeySequence.Paste): print 'Вклеенный' ', но это приводит к тому, что объект AttributeError: 'QString' не имеет атрибутов 'matches' ' – Stacked

+0

@Stacked. Пожалуйста, не спам комментариев с кодами. Если у вас есть код, который имеет отношение к вашему вопросу, добавьте его к самому вопросу. – ekhumoro

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