六、PyQt5 之 拖拽与剪切板
#!/usr/bin/python # -*- coding:utf-8 -*- """ 让控件支持脱宅动作 A.setDragEnabled(True) : A控件可以拖拽 B.setAcceptDrops(True) : B控件可以接受其他空间脱宅过来的动作 B 需要两个事件 1. dragEnterEvent 将A拖到B触发 2. dropEvent 在B区域放下A时候触发 """ import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * class MyComboBox(QComboBox): def __init__(self): super(MyComboBox, self).__init__() # 控件可以接受其他空间脱宅过来的动作 self.setAcceptDrops(True) # 重写该方法, 拖过来没松鼠标 def dragEnterEvent(self, event): print(event) # 只接收文本 if event.mimeData().hasText(): event.accept() else: event.ignore() # 重写该方法, 拖过来松下鼠标 def dropEvent(self, event): self.addItem(event.mimeData().text()) class DrapDropDemo(QWidget): def __init__(self): super(DrapDropDemo, self).__init__() formLayout = QFormLayout() formLayout.addRow(QLabel("请将左边的文本拖拽到右边的下拉列表中")) lineEdit = QLineEdit() # 让QLineEdit控件可拖动 lineEdit.setDragEnabled(True) combo = MyComboBox() formLayout.addRow(lineEdit, combo) self.setWindowTitle("拖拽案例") self.setLayout(formLayout) if __name__ == '__main__': app = QApplication(sys.argv) main = DrapDropDemo() main.show() sys.exit(app.exec_())
#!/usr/bin/python # -*- coding:utf-8 -*- """ 使用剪贴板 也就是复制粘贴 """ import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * class ClipBoard(QDialog): def __init__(self): super(ClipBoard, self).__init__() textCopyButton = QPushButton("复制文本") textPasteButton = QPushButton("粘贴文本") htmlCopyButton = QPushButton("复制HTML") htmlPasteButton = QPushButton("粘贴HTML") imageCopyButton = QPushButton("复制图像") imagePasteButton = QPushButton("粘贴图像") self.textLabel = QLabel("默认文本") self.imageLabel = QLabel() # 栅格布局 layout = QGridLayout() layout.addWidget(textCopyButton, 0, 0) layout.addWidget(imageCopyButton, 0, 1) layout.addWidget(htmlCopyButton, 0, 2) layout.addWidget(textPasteButton, 1, 0) layout.addWidget(imagePasteButton, 1, 1) layout.addWidget(htmlPasteButton, 1, 2) layout.addWidget(self.textLabel, 2, 0, 1, 2) layout.addWidget(self.imageLabel, 2, 2) self.setLayout(layout) textCopyButton.clicked.connect(self.copyText) textPasteButton.clicked.connect(self.pasteText) htmlCopyButton.clicked.connect(self.copyHtml) htmlPasteButton.clicked.connect(self.pasteHtml) imageCopyButton.clicked.connect(self.copyImage) imagePasteButton.clicked.connect(self.pasteImage) self.setWindowTitle("剪切板演示") def copyText(self): clipboard = QApplication.clipboard() # 复制文本按钮,会自动复制hello world内容 clipboard.setText("hello world") def pasteText(self): clipboard = QApplication.clipboard() self.textLabel.setText(clipboard.text()) def copyImage(self): clipboard = QApplication.clipboard() clipboard.setPixmap(QPixmap("../images/python.png")) def pasteImage(self): clipboard = QApplication.clipboard() self.imageLabel.setPixmap(clipboard.pixmap()) def copyHtml(self): mimeData = QMimeData() mimeData.setHtml('<b>Bold and <font color=red>Red</font></b>') clipboard = QApplication.clipboard() clipboard.setMimeData(mimeData) def pasteHtml(self): clipboard = QApplication.clipboard() mimeData = clipboard.mimeData() if mimeData.hasHtml(): self.textLabel.setText(mimeData.html()) if __name__ == '__main__': app = QApplication(sys.argv) main = ClipBoard() main.show() sys.exit(app.exec_())