簡體   English   中英

PyQt QLineEdit 和“粘貼”事件?

[英]PyQt QLineEdit and 'paste' event?

我到處搜索但找不到在 PyQt4 QLineEdit 中粘貼文本時觸發插槽/事件的示例?

將以下代碼添加到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

您將必須通過覆蓋“ 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_()

捕獲 CTRL-V,然后在將其粘貼到編輯器之前處理文本。

import pyperclip

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

    def keyPressEvent(self, event):
        if event.modifiers() == Qt.KeyboardModifier.ControlModifier and event.key() == Qt.Key.Key_V:
            clipboard_content = pyperclip.paste()
            self.setText('hi' + clipboard_content)
        else:
            super().keyPressEvent(event)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM