控件拖拽和剪贴板
拖拽
''' 让控件支持拖拽动作 A.setDragEnabled(True) B.setAcceptDrops(True) B需要两个事件 1. dragEnterEvent 将A拖到B触发 2. dropEvent 在B的区域放下A时触发 ''' import sys,math 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,e): print(e) if e.mimeData().hasText(): e.accept() else: e.ignore() def dropEvent(self,e): self.addItem(e.mimeData().text()) class DrapDropDemo(QWidget): def __init__(self): super(DrapDropDemo,self).__init__() formLayout = QFormLayout() formLayout.addRow(QLabel("请将左边的文本拖拽到右边的下拉列表中")) lineEdit = QLineEdit() lineEdit.setDragEnabled(True) # 让QLineEdit控件可拖动 combo = MyComboBox() formLayout.addRow(lineEdit,combo) self.setLayout(formLayout) self.setWindowTitle('拖拽案例') if __name__ == '__main__': app = QApplication(sys.argv) main = DrapDropDemo() main.show() sys.exit(app.exec_())
QMimeData类提为数据提供一个容器,用来记录关于MIME类型数据的信息
QMimeData常用来描述保存在剪切板里信息,或者拖拽原理
QMimeData对象把它所保存的信息和正确的MIME类型连接起来来保证信息可以被安全的在应用程序之间转移,或者在同一个应用程序之间拷贝
剪贴板
''' 使用剪贴板 ''' import sys,math 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() # self.imageLabel.setPixmap(QPixmap('./images/book1.png')) layout = QGridLayout() layout.addWidget(textCopyButton,0,0) layout.addWidget(imageCopyButton,0,1) layout.addWidget(htmlCopyButton,0,2) layout.addWidget(textPasteButton,1,0) layout.addWidget(htmlPasteButton,1,1) layout.addWidget(imagePasteButton,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() 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/book.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_())
天道酬勤 循序渐进 技压群雄