为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 PyQt5 中解决这个问题?

如何在 PyQt5 中解决这个问题?

函数式编程 2024-01-24 15:42:13
考虑下面给出的最低限度的例子class Main:    def __init__(self):        self.name=''        self.age=''    def setinfo(self):        self.name=input()        self.age=input()    def run(self):        self.startWin=QWidget()        self.setinfo()        dnd=DragDrop('Drop Photo here',self.startWin)        self.startWin.show()        sys.exit(app.exec_())    def showWin(self,file_path):        self.mainWin=QWidget()        self.label1=QLabel(self.name,self.mainWin)        self.label2=QLabel(self.age,self.mainWin)        self.photo = QLabel(self.mainWin)        pixmap = QPixmap(file_path)        self.photo.setPixmap(pixmap)        self.mainWin.show()class DragDrop(QLabel):    def __init__(self, title, parent):        super().__init__(title, parent)        self.setAcceptDrops(True)    def dragEnterEvent(self, event):        if event.mimeData().hasImage:            event.accept()        else:            event.ignore()        def dropEvent(self, event):        file_path = event.mimeData().urls()[0].toLocalFile()        self.showWin(file_path)app = QApplication([])instance=Main()instance.run()现在,我想要的是将文件放入 dnd(拖放 QLabel)后立即调用 Main 类的 showWin 函数,以显示该人的姓名、年龄和照片。但是,当然,来自 DragDrop 类的调用将不起作用,因为 showWin 函数属于 Main 类。我什至无法创建该类的对象然后调用它,因为我想在已经运行的实例中进行更改。我该如何克服这种情况?我已经尝试过的:我尝试将可变数据类型(如列表)传递到 DragDrop 类的构造函数中,并对其进行更改。但问题是,需要再次单击运行函数中的某个按钮才能使用该路径并调用 showWin。第二种解决方案是通过__get__在 run 函数中使用方法直接覆盖 QLabel 对象的事件方法(不形成类)。但我认为这太特定于语言了。我正在尝试为此找到一个基于面向对象的通用解决方案。
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

您可以使用自定义信号。在 DragDrop 中创建信号并在 中发出dropEvent:


image_dropped = pyqtSignal(str)

def dropEvent(self, event):

    file_path = event.mimeData().urls()[0].toLocalFile()

    self.image_dropped.emit(file_path)

将信号连接到showWinMain:


def run(self):

    self.startWin=QWidget()

    self.setinfo()

    dnd=DragDrop('Drop Photo here',self.startWin)

    dnd.image_dropped.connect(self.showWin)

    self.startWin.show()

    sys.exit(app.exec_())


查看完整回答
反对 回复 2024-01-24
  • 1 回答
  • 0 关注
  • 31 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信