Ida Pro和PyQt简单按钮连接

时间:2014-06-30 16:06:44

标签: qt plugins ida

如何使用脚本和PyQT在Ida Pro中连接按钮。 这个脚本带来了两个按钮。 我的剧本。

from idaapi import PluginForm
from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import QWidget
from PyQt4.QtGui import QPushButton
import sip

class MyPluginFormClass(PluginForm):
    def OnCreate(self, form):
        """
        Called when the plugin form is created
        """
        # Get parent widget
        self.parent = self.FormToPyQtWidget(form)
        self.PopulateForm()

    def PopulateForm(self):

        # Create layout

        layout = QtGui.QHBoxLayout()
        btn1 = QtGui.QPushButton('world')
        btn2 = QtGui.QPushButton('hello')
        layout.addWidget(btn1)
        layout.addWidget(btn2)

        self.parent.setLayout(layout)

    def OnClose(self, form):
        """
        Called when the plugin form is closed
        """
        pass

plg = MyPluginFormClass()
plg.Show("Buttons")
通常我会这样做来调用按钮。

btn1 = QtGui.QPushButton()
btn1.setText("Hello")
btn1.clicked.connect(self.hello)

def hello():
    print "hello"

但是,无论是setText还是clicked.connect都不能在Ida内部工作。 看起来我不能通过ida pro调用QAplication,因为ida本身就是一个应用程序并且如果被调用则会出现频繁。

知道如何让按钮工作吗? 此致

1 个答案:

答案 0 :(得分:1)

您必须删除应用程序执行才能完成所有工作并将Qapplication更改为Qwidget。

这是我的hello脚本,有一个小小的论坛:) 从* .py或脚本命令加载ida 一定要有sip和Qt安装proberly 这种方式你可以设计插件必须更快更丰富。 如果你看到我甚至不导入idaapi

# -*- coding: utf-8 -*-
#Created by michael



from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_TabWidget(object):
    def setupUi(self, TabWidget):
        TabWidget.setObjectName(_fromUtf8("TabWidget"))
        TabWidget.resize(764, 385)
        self.tab = QtGui.QWidget()
        self.tab.setObjectName(_fromUtf8("tab"))
        self.btn_hello = QtGui.QPushButton(self.tab)
        self.btn_hello.setGeometry(QtCore.QRect(30, 30, 75, 23))
        self.btn_hello.setObjectName(_fromUtf8("btn_hello"))
        self.btn_idaaaap = QtGui.QPushButton(self.tab)
        self.btn_idaaaap.setGeometry(QtCore.QRect(30, 90, 75, 23))
        self.btn_idaaaap.setObjectName(_fromUtf8("btn_idaaaap"))
        TabWidget.addTab(self.tab, _fromUtf8(""))
        self.tab1 = QtGui.QWidget()
        self.tab1.setObjectName(_fromUtf8("tab1"))
        self.verticalLayout = QtGui.QVBoxLayout(self.tab1)
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        self.webView = QtWebKit.QWebView(self.tab1)
        self.webView.setUrl(QtCore.QUrl(_fromUtf8("http://stackoverflow.com/questions/24494412/ida-pro-and-pyqt-simple-buttons-connect/")))
        self.webView.setObjectName(_fromUtf8("webView"))
        self.verticalLayout.addWidget(self.webView)
        TabWidget.addTab(self.tab1, _fromUtf8(""))

        self.retranslateUi(TabWidget)
        TabWidget.setCurrentIndex(1)
        QtCore.QMetaObject.connectSlotsByName(TabWidget)

    def retranslateUi(self, TabWidget):
        TabWidget.setWindowTitle(_translate("TabWidget", "TabWidget", None))
        self.btn_hello.setText(_translate("TabWidget", "Hello World", None))
        self.btn_idaaaap.setText(_translate("TabWidget", "Help idaapi", None))
        TabWidget.setTabText(TabWidget.indexOf(self.tab), _translate("TabWidget", "test signal", None))
        TabWidget.setTabText(TabWidget.indexOf(self.tab1), _translate("TabWidget", "stackoverflow Forum", None))
        self.btn_hello.clicked.connect(self.Hello)
        self.btn_idaaaap.clicked.connect(self.Help)


    def Hello(self):
        print "what the heck how did i get in here"

    def Help(self):
        help("idaapi")



from PyQt4 import QtWebKit

if __name__ == "__main__":
    import sys
    app = QtGui.QWidget()
    TabWidget = QtGui.QTabWidget()
    ui = Ui_TabWidget()
    ui.setupUi(TabWidget)
    TabWidget.show()