2

どこでも右クリックできる Maya 用のツール ウィンドウを作成しようとしています。[追加] をクリックすると、カーソル位置に長方形のウィジェットが表示されます。

これで、右クリック機能が機能します。関数でカーソル位置を取得することもできますaddPicker()。しかし、新しく作成したウィジェットの配置に問題があります。レイアウトを追加し、新しく作成したウィジェットを追加すると、実際に表示されます。ただし、これらのウィジェットのレイアウトを作成していない場合は、テストした位置に関係なく、ウィンドウに何も表示されません。

うまくいけば、誰かがいくつかのアイデアを持っています。よろしくお願いします。

右クリックのスクリーンショット: 右クリックのスクリーンショット

class RightClickMenu(QtGui.QMenu):

    def __init__(self, *args, **kwargs):
        super(RightClickMenu, self).__init__(*args)

        self.parentWidget().setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.parentWidget().customContextMenuRequested.connect(self.menuPos)

    def menuPos(self, *args):
        self.exec_(QtGui.QCursor.pos())

class Ui_window(object):
    def setupUi(self, window):
        window.setObjectName("window")
        window.resize(555, 900)
        self.widget_base = QtGui.QWidget()

        self.verticalLayout_window = QtGui.QVBoxLayout(window)
        self.verticalLayout_window.addWidget(self.widget_base)

        self.menu_popup = RightClickMenu(self.widget_base)
        self.menu_popup.setObjectName("popupMenu")
        self.verticalLayout_widget = QtGui.QVBoxLayout(self.widget_base)

        # Action - add picker
        addAction = QtGui.QAction('Add Picker', self.widget_base)
        addAction.setShortcut('Ctrl+A')
        addAction.setStatusTip('Add Picker')
        addAction.triggered.connect(self.addPicker)
        self.menu_popup.addAction(addAction)

        # Action - delete picker
        deleteAction = QtGui.QAction('Delete Picker', self.widget_base)
        deleteAction.setShortcut('Ctrl+D')
        deleteAction.setStatusTip('Delete Picker')
        deleteAction.triggered.connect(self.deletePicker)
        self.menu_popup.addAction(deleteAction)

    def addPicker(self):
        cursorPos = QtGui.QCursor.pos()
        localPos = self.widget_base.mapFromGlobal(cursorPos)
######################################################################
        # how??? below doesn't work.
        self.pushButton = QtGui.QPushButton(self.widget_base)
        self.pushButton.setGeometry(QtCore.QRect(220, 50, 75, 23))
        self.pushButton.setObjectName("pushButton")

    def deletePicker(self):
        print 'delete'



def run():
    import sys
    try:
        Ui_window.close()
    except:
        pass

    pickerWindow = QtGui.QDialog()
    ui = Ui_window()
    ui.setupUi(pickerWindow)
    pickerWindow.show()
    pickerWindow.exec_()
4

1 に答える 1