【问题标题】:How to get filepath from droped file with pyqt5?如何使用pyqt5从删除的文件中获取文件路径?
【发布时间】:2017-07-06 02:09:26
【问题描述】:

我想获取放置在 QLabel 上的文件的路径。所以我这样编码,但标签不接受文件。问题是什么..? 这是我的代码。这么长的代码对不起,谢谢!

import random
import sys
import pygame
import time
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtWidgets import QWidget, QLabel, QApplication, QDesktopWidget
class Example(QWidget):
    size=100
    imgNum=0
    frameCount=4
    isXmin = False
    isXmax = False
    isYmin = False
    isYmax = False
    isLeft= True
def __init__(self):
    super().__init__()
    self.initUI()
def initUI(self):
    sizeObject = QDesktopWidget().screenGeometry()
    # print(" Screen size : " + str(sizeObject.height()) + "x" + str(sizeObject.width()))
    self.xMax=sizeObject.width()-10
    self.yMax=sizeObject.height()-10
    print(self.xMax)
    print(self.yMax)
    self.setWindowFlags(Qt.FramelessWindowHint)
    self.setAttribute(Qt.WA_TranslucentBackground)
    self.setStyleSheet("background-color:transparent;")
    self.setGeometry(100, 100, 100, 100)
    self.setWindowFlags(Qt.SplashScreen | Qt.WindowStaysOnTopHint)
    self.setAcceptDrops(True)
    self.label=QLabel(self)
    self.label.setAcceptDrops(True)
    self.pixmaps=[QPixmap('left.png'),QPixmap('stand.png'),QPixmap('right.png'),QPixmap('stand.png'),QPixmap('leftR.png'),QPixmap('standR.png'),QPixmap('rightR.png'),QPixmap('standR.png')]
    for x in range(len(self.pixmaps)):
        self.pixmaps[x]=self.pixmaps[x].scaled(self.size,self.size,Qt.KeepAspectRatio)
    self.resize(self.pixmaps[2].width(),self.pixmaps[2].height())
    self.label.setPixmap(self.pixmaps[len(self.pixmaps)-1])
    self.changeTimer=QTimer(self)
    self.changeTimer.timeout.connect(self.changeFoot)
    self.moveTimer=QTimer(self)
    self.moveTimer.timeout.connect(self.moving)
    self.setAcceptDrops(True)
    pygame.init()
    pygame.mixer.music.load('hoi_imtemmie.mp3')
    pygame.mixer.music.play()
    self.show()

def dragEnterEvent(self, event):
    if event.mimeData().hasUrls:
        event.accept()
    else:
        event.ingore()
def dropEvent(self, event):
    self.path=event.mimeData.urls() 
def moving(self):
    if self.distance == 0:
        print(self.distance)
        print(self.x(),"x",self.y())
        self.label.setPixmap(self.pixmaps[1])
        self.moveTimer.stop()
        self.changeTimer.stop()
        time.sleep(3)
        self.setMovement()
        return 0
    else:
        self.move(self.x()+self.direct[0],self.y()+self.direct[1])
        self.distance-=1
    if self.x()<=-10 :
        self.distance=0
        print("xm")
        self.isXmin = True
    if self.y()<=-10 :
        self.distance=0
        print("ym")
        self.isYmin = True
    if self.x()>=self.xMax:
        self.distance=0
        print("xM")
        self.isXmax=True
    if self.y()>=self.yMax :
        self.distance=0
        print("yM")
        self.isYmax=True

def setMovement(self):
    self.direct=[0,0]
    while(self.direct[0]==0 and self.direct[1]==0):
        self.direct=[random.randint(-1,1),random.randint(-1,1)]
    if self.isXmax:
        self.direct[0]=-1
    if self.isXmin:
        self.direct[0]=1
    if self.isYmin:
        self.direct[1]=1
    if self.isYmax:
        self.direct[1]=-1

    if self.direct[0]== -1:
        self.isLeft=True
        self.imgNum=0
    elif self.direct[0]== 1:
        self.isLeft=False
        self.imgNum=4
    self.isXmax = False
    self.isXmin = False
    self.isYmin = False
    self.isYmax = False
    # if direct[0]*direct[1]==0 : self.delta = QPoint(dX*direct[0],dY*direct[1])
    # else: self.delta=QPoint(direct[0]*(dX**(1/2)),direct[1]*(dY**1/2))
    self.distance=random.randint(200,400)
    self.changeTimer.start(300)
    self.moveTimer.start(30)

def changeFoot(self):
    self.label.setPixmap(self.pixmaps[self.imgNum])
    if self.isLeft:
        if self.imgNum<self.frameCount-1:
            self.imgNum+=1
        else :
            self.imgNum=0
    else:
        if self.imgNum<2*self.frameCount-1:
            self.imgNum+=1
        else :
            self.imgNum=self.frameCount

def mousePressEvent(self, QMouseEvent):
    self.setMovement()
    pygame.mixer.music.load('hoi_imtemmie.mp3')
    pygame.mixer.music.play()
def keyPressEvent(self, QKeyEvent):
    if QKeyEvent.key() == Qt.Key_Escape:
        sys.exit()
    # if QKeyEvent.key() == Qt.Key_G:
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

我设置了 AcceptDrops(True)

self.setAcceptDrops(True)

以及关于获取文件路径的代码▼

def dragEnterEvent(self, event):
    if event.mimeData().hasUrls:
        event.accept()
    else:
        event.ingore()
def dropEvent(self, event):
    self.path=event.mimeData.urls()

【问题讨论】:

    标签: drag-and-drop pyqt5 python-3.6


    【解决方案1】:

    尝试循环遍历 event.mimeData().urls()

    for url in event.mimeData().urls():
        self.path = url.toLocalFile()
    

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      相关资源
      最近更新 更多