Python 如何在pyqt5的子窗口中使用dragEvent
这是我的关键代码:Python 如何在pyqt5的子窗口中使用dragEvent,python,pyqt5,Python,Pyqt5,这是我的关键代码: from PyQt5 import QtWidgets from PyQt5.QtCore import Qt from PyQt5.QtGui import QIcon, QPixmap, QImage, QCursor, QMovie from PyQt5.QtWidgets import QApplication, QMenu, QSystemTrayIcon, QLabel, QAction import sys class Desktop(QtWidgets.QWi
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon, QPixmap, QImage, QCursor, QMovie
from PyQt5.QtWidgets import QApplication, QMenu, QSystemTrayIcon, QLabel, QAction
import sys
class Desktop(QtWidgets.QWidget):
def __init__(self):
super().__init__()
# init
self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint | Qt.SubWindow)
self.setAutoFillBackground(False)
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.repaint()
self.move((self.screen().availableGeometry().width() - 200),
self.screen().availableGeometry().height() - 200)
self.setAcceptDrops(True)
self.is_follow_mouse = False
self.mouse_drag_pos = self.pos()
self.op = QLabel(self)
self.op.setText("Drag here")
self.op.show()
def dragEnterEvent(self, event):
if event.mimeData().hasUrls:
event.accept()
else:
event.ignore()
def dragMoveEvent(self, event):
if event.mimeData().hasUrls:
try:
event.setDropAction(Qt.CopyAction)
except Exception as e:
print(e)
event.accept()
else:
event.ignore()
def dropEvent(self, event):
try:
if event.mimeData().hasUrls:
event.setDropAction(Qt.CopyAction)
event.accept()
for url in event.mimeData().urls():
print(str(url.toLocalFile()))
else:
event.ignore()
except Exception as e:
print(e)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.is_follow_mouse = True
self.mouse_drag_pos = event.globalPos() - self.pos()
event.accept()
self.setCursor(QCursor(Qt.OpenHandCursor))
def mouseMoveEvent(self, event):
if Qt.LeftButton and self.is_follow_mouse:
self.move(event.globalPos() - self.mouse_drag_pos)
event.accept()
def mouseReleaseEvent(self, event):
self.is_follow_mouse = False
self.setCursor(QCursor(Qt.ArrowCursor))
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = Desktop()
widget.show()
sys.exit(app.exec_())
当窗口是Qt时,这就起作用了
self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint)
然而,当我使用这个
self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint | Qt.SubWindow)
这不行!当我把一个文件、链接或其他东西拖到窗口中时,会出现一个停止标志,毫无例外
那么,我该怎么做才能修复它呢?谢谢请提供@eyllanesc谢谢,我替换了这个例子我知道英语不是你的母语,但请在拼写技术术语时更加小心。这不是拖拽就是拖拽,这两个相关事件之间有很大的区别,因为有些情况下区分它们很重要,如果你写“拖拽”,我们就无法理解你指的是哪一个。@musicamante谢谢~,我会处理好的。请提供一个@eyllanesc谢谢,我理解英语不是你的母语,但请注意技术术语的拼写。这要么是拖拽,要么是拖拽,这两个相关事件之间有很大的区别,因为有些情况下区分它们很重要,如果你写“拖拽”,我们就无法理解你指的是哪一个。@musicamante谢谢~,我会处理好的