如何使用脚本和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本身就是一个应用程序并且如果被调用则会出现频繁。
知道如何让按钮工作吗? 此致
答案 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()