UI不接受文件删除

2024-09-29 18:42:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做什么:

我正在尝试创建一个PySide2/PyQt窗口,它接受掉在其UI上的文件并运行一个函数。在

问题:

UI不接受文件删除,也不触发定义的任何事件函数。 enter image description here

我目前所做的:

下面是我的应用程序的精简代码,我正在加载Qt Designer中创建的一个.ui文件来加载接口。在

  • 窗口存储在自我窗口变量。

  • 在自我窗口具有setAcceptDrops(True)。

  • 还定义了事件函数。

-代码

from PySide2 import QtUiTools
from PySide2 import QtGui
from PySide2 import QtCore
from PySide2 import QtWidgets

import os,sys
kUiFilePath = os.path.join(os.path.dirname(__file__) , 'uiFile.ui')


class LoadTool(QtWidgets.QMainWindow):
    def __init__(self, uiFilePath):
        self.window = None
        self.app = None
        self.loadUI(uiFilePath)
        self.window.setAcceptDrops(True)
        self.window.show()
        sys.exit(self.app.exec_())

    def dropEvent(self, e):
        print e
        e.accept()

    def dragEnterEvent(self, e):
        print e
        e.accept()

    def dragMoveEvent(self, e):
        print e
        e.accept()


    def loadUI(self, uiFilePath):        
        self.app = QtWidgets.QApplication(sys.argv)
        super(LoadTool, self).__init__()
        self.window = QtUiTools.QUiLoader().load(uiFilePath)

LoadTool(kUiFilePath)

UI文件代码

^{2}$

Tags: 文件函数代码fromimportselfuios
1条回答
网友
1楼 · 发布于 2024-09-29 18:42:12

这对你有用吗?在

from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication, QWidget
from PySide2.QtCore import QFile

from contextlib import closing
import sys


class DropWidget(QWidget):
    def __init__(self, parent=None):
        super(DropWidget, self).__init__(parent)

    def dropEvent(self, e):
        print("Drop", e)
        e.accept()

    def dragEnterEvent(self, e):
        print("dragEnter", e)
        e.accept()

    def dragMoveEvent(self, e):
        print("dragMove", e)
        e.accept()


class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.ui_loader = QUiLoader()
        self.ui_loader.registerCustomWidget(DropWidget)
        self.ui_file = QFile('uiFile2.ui')
        with closing(self.ui_file) as self.qt_file:
            if self.qt_file.open(QFile.ReadOnly):
                self.main_win = self.ui_loader.load(self.qt_file)
            else:
                print('Failed to read UI')

    def show(self):
        self.main_win.show()


app = QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())

以及

^{pr2}$

使用UI文件有几个陷阱: 1主UI对象是加载程序返回的对象。发布的代码不是为加载的对象而是为加载工具定义事件方法 2自定义小部件必须注册到ui_loader.registerCustomWidget才能使用 三。错误发生后,加载UI文件将停止

我不确定,这是否适用于QDialog 请不要,这段代码是为python3.6编写的

相关问题 更多 >

    热门问题