PYQT Maya QMouseEvent 在我包装它之后将无法正常工作

from PySide2 import QtGui,QtCore,QtWidgets

from PySide2.QtGui import*

from PySide2.QtCore import *

from PySide2.QtWidgets import *

from shiboken2 import wrapInstance

import maya.OpenMayaUI as mui

import sys

class ui(QWidget):

    def __init__(self,parent):

        super(ui,self).__init__(parent)

        self.resize(300,500)

        self.mainWindow = QtWidgets.QMainWindow(parent)

        self.setupUI(self.mainWindow)

        self.setFocus()

    def setupUI(self,mainWindow):

        mymainWindow = QWidget(mainWindow)

        mymainWindow.resize(300,500)

    def mousePressEvent(self,e):

        print 'sdfasdf'

        if e.button()==Qt.RightButton:

            print "Clickkkk"

    def Show(self):

        self.mainWindow.show()

class app():

    def __init__(self):

        self.ptr = mui.MQtUtil.mainWindow()

        self.ptr = wrapInstance(long(self.ptr),QtWidgets.QWidget)      

        self.ui = ui(self.ptr)

    def runApp(self):

        self.ui.Show()

        self.ui.setFocus()


tt = app()

tt.runApp()

以下是我正在测试的代码。使用后不再工作。wrapInstancemouseEvent


但如果我没有包装它,那就是工作


不工作


class app():

    def __init__(self):

        self.ptr = mui.MQtUtil.mainWindow()

        self.ptr = wrapInstance(long(self.ptr),QtWidgets.QWidget)      

        self.ui = ui(self.ptr)

    def runApp(self):

        self.ui.Show()

        self.ui.setFocus()

加工


我还更改了UI类中的一些父结构


class app():

    def __init__(self):    

        self.ui = ui()

    def runApp(self):

        self.ui.Show()

谁能解释为什么在我包装后将无法正常工作?如何使它工作?MouseEvent


POPMUISE
浏览 80回答 1
1回答

子衿沉夜

问题的症结在于: .这将运行您的自定义方法,而该方法又运行此 .这会导致显示,但您子类化为 ,而不是 !因此,它没有运行事件,因为您单击了错误的小部件。self.ui.Show()self.mainWindow.show()self.mainWindowmousePressEventuiself.mainWindow相反,因为 是 一个 , 调用 。您可能还需要输入 的构造函数。这样,当用户单击鼠标事件时,鼠标事件将按预期运行。uiQWidgetself.ui.show()self.setWindowFlags(QtCore.Qt.Window)ui一些旁注:我怀疑你是否真的想在.它只是觉得很奇怪。考虑对 a 进行子类化,因为它应该是“顶级”小部件。QMainWindowQWidgetQMainWindow还要尽量避免像 这样导入模块,而是像这样导入它们。这是不好的做法,会污染模块的范围,并使代码更加不可读/不可维护,因为很难追溯这些变量的来源。from PySide2.QtCore import *from PySide2 import QtCore哦,为了上帝的爱,使用一些垂直的白间距:)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python