how do i connect the buttons, in a Ida Pro using a script and PyQT. this script brings two buttons up. my script.
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")
normally i would do like this to call the buttons.
btn1 = QtGui.QPushButton()
btn1.setText("Hello")
btn1.clicked.connect(self.hello)
def hello():
print "hello"
But appenrently either setText or clicked.connect dont work inside Ida. also it looks like that i cant call QAplication via ida pro, since ida itself is a application and frezzes if called.
Any idea how to make buttons work ? Regards
You would have to delete the app execution to make all work and change Qapplication to Qwidget.
here is my hello script with a little mini forum :) load in ida from either *.py or from script command be sure to have sip and Qt instal proberly This way You can disign plugins must faster and richer. and if you see i dont even import 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()