Win10系統鼠標不能正常拖動文件或文件夾圖標怎么辦?有用戶在使用鼠標拖動文件圖標是發現無法拖動,該如何解決?下面給大家分析常見原因及其解決方法。
解決辦法:多按兩次ESC鍵試試看。
解決辦法:檢查下鼠標接口(PS/2類型,注意先關閉計算機),如果故障依舊,看樣子您的電腦需要換個新鼠標了!
解決辦法:
第一步、按下“Win+R(不含引號,下同)”,再出現的運行命令中輸入“gpedit.msc”后回車。
第二步、在本地組策略編輯器界面,依次展開左側面板用戶配置-〉管理模板-〉windows組件-〉任務計劃程序,點擊選中“任務計劃程序”,在右側窗口找到并蛋黃及打開“禁止拖放”。
第三步、在禁止拖放界面,點擊選擇“未配置”,或者“已禁用”后,點擊確定后,重啟電腦即可。
解決辦法:這種情況只發生在桌面圖標上,應該是桌面圖標被設置成了自動排列,桌面空白處右鍵,菜單中取消“自動排列圖標”即可。
在GUI應用開發中,使用拖放技術在不同控件或者應用之間進行數據交換,是一種常見的交互功能。使用該技術的典型示例就是在Windows系統的資源管理器中移動或復制文件。在資源管理里,如果要將文件移動到另一個目錄,只需用鼠標左鍵單擊文件圖標并按住不放,將文件拖動到目標目錄,然后再釋放鼠標按鈕,則可以完成移動或者復制操作。
一個典型的拖放操作過程,涉及到三個方面,從某個控件或者應用拖動某個對象(文件、一段文本信息等等),數據傳遞,放置拖動對象到目標窗口。
QDrag有以下常用方法:
data=QMimeData ()
data.setText ("Drag text")
drag=QDrag (self)
drag.setMimeData (data)
drag.setPixmap (QPixmap ("drag.png"))
drag.setHotSpot (QPoint (20, 20))
drag.setDragCursor(QPixmap ("move_cursor.png"), Qt.MoveAction)
QDrag的信號:
通過將QMineData對象作為參數調用QDrag的setMimeData()函數來實現拖放過程中的MIME類型的數據傳遞。
創建QMimeData方法:
data=QMimeData()
QMimeData類有以下方法:
data.setText('drag text ')
data.setHtml('<b> drag HTML text</ b>')
data.setUrls ([QUrl ("http://www.google.com/")])
url=e.mimeData (). urls () [0] .toString ()
data.setlmageData (Qlmage("pixmap.png"))
data.setlmageData (QPixmap("pixmap.png"))
data.setData("text/plain",QByteArray (bytes ("Data", "utf-8")))
如果要實現特殊類型數據的拖放,需要創建一個QMimeData子類,并重載retrieveData() 和 formats()方法。
在處理拖放對象之前,必須告訴系統該組件可以處理這些事件。 為此,要在控件的構造函數中,調用繼承自QWidget類的setAcceptDrops方法,參數值為True。如:
self.setAcceptDrops(True)
拖放對象的過程執行如下:
在QWidget類中的下列方法可以處理在拖放過程中所發生的事件:
QDropEvent類有下列方法:
if event.possibleActions () & Qt.MoveAction:
print ("Move Action")
if event.possibleActions () &Qt.CopyAction:
print ("Copy Action")
QDragMoveEvent類的方法有:
Qt中的有些控件,如單行文本控件,已有拖放功能。
測試代碼中MyLabel類繼承自QLabel,它可以接收QLineEdit里面選中的文字拖入并顯示。完整代碼如下:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import (QApplication, QWidget, QLineEdit, QFrame, QLabel, QVBoxLayout)
class MyLabel(QLabel):
def __init__(self, title, parent = None):
super(MyLabel, self).__init__(title, parent)
#接受拖入操作
self.setAcceptDrops(True)
#加邊框
self.setFrameShape(QFrame.Box)
self.setLineWidth(1)
#文字居中顯示
self.setAlignment(Qt.AlignCenter)
#字體加大顯示
self.setFont(QFont(self.font().family(), 24))
#拖動進入事件
def dragEnterEvent(self, event):
if(event.mimeData().hasFormat('text/plain')):
event.accept()
else:
event.ignore()
#放置事件
def dropEvent(self, event):
self.setText(event.mimeData().text())
class DemoDragDropEvent(QWidget):
def __init__(self, parent=None):
super(DemoDragDropEvent, self).__init__(parent)
# 設置窗口標題
self.setWindowTitle('實戰PyQt5: 拖放操作演示')
# 設置窗口大小
self.resize(400, 160)
self.initUi()
def initUi(self):
mainLayout = QVBoxLayout()
editBox = QLineEdit('拖動選中的文字')
editBox.setDragEnabled(True)
textBox = MyLabel('文字拖放到這里')
mainLayout.addWidget(editBox)
mainLayout.addWidget(textBox)
self.setLayout(mainLayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoDragDropEvent()
window.show()
sys.exit(app.exec())
運行效果如下圖所示:
拖放技術演示
喜歡本文內容就關注, 收藏,點贊,評論和轉發。