2017-08-25 2 views
0

L'utilisateur souhaite copier un texte dans un éditeur de texte externe et le coller dans le QTableView en utilisant Command + v sur Mac ou les touches de raccourci «Ctrl + v».Comment obtenir des données de copier-coller avec QTableView

J'ai implémenté keyPressEvent qui suit chaque action de clavier utilisateur. Mais comment obtenir les données pated à partir du presse-papiers?

from PyQt5.QtGui import * 
from PyQt5.QtWidgets import * 
from PyQt5.QtCore import * 


class View(QTableView): 
    def __init__(self): 
     super(View, self).__init__(parent=None) 

    def keyPressEvent(self, event): 
     if event.matches(QKeySequence.Copy): 
      print 'Ctrl + C' 
     if event.matches(QKeySequence.Paste): 
      print 'Ctrl + V' 
     QTableView.keyPressEvent(self, event) 


app = QApplication([]) 
view = View() 
view.show() 
qApp.exec_() 

enter image description here

+0

Vous voulez que lorsque vous exécutez Ctrl + V vous créez un élément?, Ceci ne sera pas fait automatiquement, donc vous devez le faire à travers un modèle. Si vous collez le texte dans quelle position voulez-vous le coller puisqu'il s'agit d'un QTableView? – eyllanesc

+0

Imprimer le texte collé ou les données serait très bien pour cet exemple. – alphanumeric

Répondre

2

Vous devez utiliser un objet de la classe QClipboard, dans ce cas, nous obtenons par QApplication, pour obtenir le texte que nous utilisons QClipboard::text() et coller un texte que nous utilisons QClipboard::setText()

Dans votre cas:

def keyPressEvent(self, event): 
    clipboard = QApplication.clipboard() 
    if event.matches(QKeySequence.Copy): 
     print('Ctrl + C') 
     clipboard.setText("some text") 
    if event.matches(QKeySequence.Paste): 
     print(clipboard.text()) 
     print('Ctrl + V') 
    QTableView.keyPressEvent(self, event)