from PySide2 import QtGui,QtCore,QtWidgetsfrom PySide2.QtGui import*from PySide2.QtCore import *from PySide2.QtWidgets import *from shiboken2 import wrapInstanceimport maya.OpenMayaUI as muiimport sysclass 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
1 回答

子衿沉夜
TA贡献1828条经验 获得超3个赞
问题的症结在于: .这将运行您的自定义方法,而该方法又运行此 .这会导致显示,但您子类化为 ,而不是 !因此,它没有运行事件,因为您单击了错误的小部件。self.ui.Show()
self.mainWindow.show()
self.mainWindow
mousePressEvent
ui
self.mainWindow
相反,因为 是 一个 , 调用 。您可能还需要输入 的构造函数。这样,当用户单击鼠标事件时,鼠标事件将按预期运行。ui
QWidget
self.ui.show()
self.setWindowFlags(QtCore.Qt.Window)
ui
一些旁注:
我怀疑你是否真的想在.它只是觉得很奇怪。考虑对 a 进行子类化,因为它应该是“顶级”小部件。QMainWindow
QWidget
QMainWindow
还要尽量避免像 这样导入模块,而是像这样导入它们。这是不好的做法,会污染模块的范围,并使代码更加不可读/不可维护,因为很难追溯这些变量的来源。from PySide2.QtCore import *
from PySide2 import QtCore
哦,为了上帝的爱,使用一些垂直的白间距:)
添加回答
举报
0/150
提交
取消