gpt4 book ai didi

python - 如何在 PyQt 的动态 UI 中覆盖小部件的事件(dropEvent)?

转载 作者:行者123 更新时间:2023-12-02 21:00:00 25 4
gpt4 key购买 nike

我在做什么/到目前为止我有什么:

我正在使用 Qt-designer 创建 PyQt .ui 文件,我正在使用 QUiLoader 将其加载到我的 python 脚本中,这使我可以访问小部件/组件:

self.ui.tree_widget_of_items ( which is a QTreeWidget created in Qt-designer)

我能够读取和写入小部件的值,并且能够像这样在 TreeWidget 上使用信号:

self.ui.tree_widget_of_items.itemSelectionChanged.connect(self.myFunction)

我想做什么?

  • 我想在我的 python 脚本中覆盖 treeWidget 的 dropEvent

我试过但没用的:

self.ui.tree_widget_of_items.dropEvent = self.drop_action

def drop_action(self,e):
print "drop action"

我已经尝试将我自己的函数分配给 TreeWidget 的 dropEvent,但是当我在 TreeWidget 上放置一个项目时它不会被触发。

我也试过:

self.ui.tree_widget_of_items.dragEnterEvent = self.drop_action

我确保在 TreeWidget 上启用了拖放。

最佳答案

在动态 UI 中实现事件(这意味着 UI 在 Qt-designer 中创建并在使用 .ui 文件的 python 工具中使用)。你需要以下东西:

  1. 你的工具的MainWindow类应该继承QtGui.QMainWindow

    class main_window(QtGui.QMainWindow):
  2. 它应该调用 super().init()

    class main_window(QtGui.QMainWindow):
    def __init__(self, parent=None):
    super(main_window, self).__init__(parent)

    loader = QUiLoader()
    file = QtCore.QFile(os.path.join(SCRIPT_DIRECTORY, 'mainwindow.ui'))
    file.open(QtCore.QFile.ReadOnly)
    if parent:
    self.ui = loader.load(file, parentWidget=parent)
    else:
    self.ui = loader.load(file)
    file.close()
  3. 在组件上安装 EventFilter:

    self.ui.tree_widget_of_items.installEventFilter(self)      
    # not --> self.ui.tree_widget_of_items.installEventFilter(self.ui)
  4. 定义 eventFilter() :

    def eventFilter(self, o, e):
    if (o.objectName() == "tree_widget_of_items"):
    if e.type() == QtCore.QEvent.Type.Enter:
    self.drop_action(e)

关于python - 如何在 PyQt 的动态 UI 中覆盖小部件的事件(dropEvent)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38838354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com