def init_gui():
""" Tries to find the main Binja window. If we've already found it, does nothing.
Call this as many times as you want, just in case. """
global main_window
if main_window is None:
app = QApplication.instance()
main_window = [x for x in app.allWidgets() if x.__class__ is QMainWindow][0]
python类instance()的实例源码
def initMenus(self):
exitAction = QAction('&Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Exit application')
exitAction.triggered.connect(QApplication.instance().quit)
self.fileMenu.addAction(exitAction)
def __init__(self, db):
super().__init__()
self.refresh.connect(self.reload_image)
self.quit_app.connect(QApplication.instance().quit)
self.db = db
self.goals = load(db)
self.use_dot = True
self.force_refresh = True
def _bootstrapGCCache(self):
app = QApplication.instance()
if not hasattr(app, "_windowCache"):
app._windowCache = set()
app._windowCache.add(self)
def _flushGCCache(self):
app = QApplication.instance()
try:
app._windowCache.remove(self)
except KeyError:
# if self.close() is called more than once we'll end up
# here. that's fine
pass
def run(self):
app = QApplication.instance()
if app is None:
app = QApplication(['--platform', 'minimal'])
# we need this call to correctly render images...
app.processEvents()
printer = QPrinter()
if self.printer_name:
printer.setPrinterName(self.printer_name)
printer.setResolution(96)
text_document = QTextDocument()
printer.setFullPage(True)
printer.setPageMargins(5, 5, 5, 5, QPrinter.Millimeter)
page_size = QSizeF()
page_size.setHeight(printer.height())
page_size.setWidth(printer.width())
text_document.setPageSize(page_size)
text_document.setDocumentMargin(0.0)
text_document.setHtml(self.html)
text_document.print_(printer)
def __init__(self, parent, map_handle):
# call widget init
QWidget.__init__(self, parent)
# link app
self._app = QApplication.instance()
# link map handle
self._map = map_handle
# load and set up UI
self.ui = UiSpectrumWidget(self)
# visible flag used for the curser
self._visible_flag = False
# create plot canvas
self._spectrum_canvas = SpectrumCanvas(self.ui.plot_widget, self._map)
# add callbacks to map canvas
self._spectrum_canvas.add_callback('button_press_event', self.cb_spectrum_button_press_event)
# widget including the toolbar
self._spectrum_canvas.add_toolbar(self.ui.toolbar_widget)
# add callbacks
self.ui.spectrum_check_box.stateChanged.connect(self.update_data)
self.ui.initial_fit_check_box.stateChanged.connect(self.update_data)
self.ui.initial_peaks_check_box.stateChanged.connect(self.update_data)
self.ui.optimized_fit_check_box.stateChanged.connect(self.update_data)
self.ui.optimized_peaks_check_box.stateChanged.connect(self.update_data)
def __init__(self):
# link app
self._app = QApplication.instance()
# create dictionary for maps
self._maps = {}
# set flags for selected map and map counter
self._selected = None
self._counter = 0
self._id_counter = 0
# call super init
super(MapList, self).__init__()
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
headers = ("Title", "Description")
file = QFile(':/default.txt')
file.open(QIODevice.ReadOnly)
model = TreeModel(headers, file.readAll())
file.close()
self.view.setModel(model)
for column in range(model.columnCount()):
self.view.resizeColumnToContents(column)
self.exitAction.triggered.connect(QApplication.instance().quit)
self.view.selectionModel().selectionChanged.connect(self.updateActions)
self.actionsMenu.aboutToShow.connect(self.updateActions)
self.insertRowAction.triggered.connect(self.insertRow)
self.insertColumnAction.triggered.connect(self.insertColumn)
self.removeRowAction.triggered.connect(self.removeRow)
self.removeColumnAction.triggered.connect(self.removeColumn)
self.insertChildAction.triggered.connect(self.insertChild)
self.updateActions()
def __init__(self):
super(ChatMainWindow, self).__init__()
self.m_nickname = "nickname"
self.m_messages = []
self.setupUi(self)
self.sendButton.setEnabled(False)
self.messageLineEdit.textChanged.connect(self.textChangedSlot)
self.sendButton.clicked.connect(self.sendClickedSlot)
self.actionChangeNickname.triggered.connect(self.changeNickname)
self.actionAboutQt.triggered.connect(self.aboutQt)
QApplication.instance().lastWindowClosed.connect(self.exiting)
# Add our D-Bus interface and connect to D-Bus.
ChatAdaptor(self)
QDBusConnection.sessionBus().registerObject('/', self)
iface = ChatInterface('', '', QDBusConnection.sessionBus(), self)
QDBusConnection.sessionBus().connect('', '', 'org.example.chat',
'message', self.messageSlot)
iface.action.connect(self.actionSlot)
dialog = NicknameDialog()
dialog.cancelButton.setVisible(False)
dialog.exec_()
self.m_nickname = dialog.nickname.text().strip()
self.action.emit(self.m_nickname, "joins the chat")
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.nameLabel.setProperty('class', 'mandatory QLabel')
self.styleSheetEditor = StyleSheetEditor(self)
self.statusBar().addWidget(QLabel("Ready"))
self.ui.exitAction.triggered.connect(QApplication.instance().quit)
self.ui.aboutQtAction.triggered.connect(QApplication.instance().aboutQt)
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
headers = ("Title", "Description")
file = QFile(':/default.txt')
file.open(QIODevice.ReadOnly)
model = TreeModel(headers, file.readAll())
file.close()
self.view.setModel(model)
for column in range(model.columnCount()):
self.view.resizeColumnToContents(column)
self.exitAction.triggered.connect(QApplication.instance().quit)
self.view.selectionModel().selectionChanged.connect(self.updateActions)
self.actionsMenu.aboutToShow.connect(self.updateActions)
self.insertRowAction.triggered.connect(self.insertRow)
self.insertColumnAction.triggered.connect(self.insertColumn)
self.removeRowAction.triggered.connect(self.removeRow)
self.removeColumnAction.triggered.connect(self.removeColumn)
self.insertChildAction.triggered.connect(self.insertChild)
self.updateActions()
def __init__(self):
super(ChatMainWindow, self).__init__()
self.m_nickname = "nickname"
self.m_messages = []
self.setupUi(self)
self.sendButton.setEnabled(False)
self.messageLineEdit.textChanged.connect(self.textChangedSlot)
self.sendButton.clicked.connect(self.sendClickedSlot)
self.actionChangeNickname.triggered.connect(self.changeNickname)
self.actionAboutQt.triggered.connect(self.aboutQt)
QApplication.instance().lastWindowClosed.connect(self.exiting)
# Add our D-Bus interface and connect to D-Bus.
ChatAdaptor(self)
QDBusConnection.sessionBus().registerObject('/', self)
iface = ChatInterface('', '', QDBusConnection.sessionBus(), self)
QDBusConnection.sessionBus().connect('', '', 'org.example.chat',
'message', self.messageSlot)
iface.action.connect(self.actionSlot)
dialog = NicknameDialog()
dialog.cancelButton.setVisible(False)
dialog.exec_()
self.m_nickname = dialog.nickname.text().strip()
self.action.emit(self.m_nickname, "joins the chat")
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.nameLabel.setProperty('class', 'mandatory QLabel')
self.styleSheetEditor = StyleSheetEditor(self)
self.statusBar().addWidget(QLabel("Ready"))
self.ui.exitAction.triggered.connect(QApplication.instance().quit)
self.ui.aboutQtAction.triggered.connect(QApplication.instance().aboutQt)
def setUp(self):
super().setUp()
self.form.ui.tabWidget.setCurrentIndex(2)
logger.debug("Preparing Modulation dialog")
self.dialog, _ = self.form.generator_tab_controller.prepare_modulation_dialog()
QApplication.instance().processEvents()
QTest.qWait(self.WAIT_TIMEOUT_BEFORE_NEW)
if self.SHOW:
self.dialog.show()
logger.debug("Initializing Modulation dialog")
self.form.generator_tab_controller.initialize_modulation_dialog("1111", self.dialog)
logger.debug("Preparation success")
def test_load_proto(self):
QApplication.instance().processEvents()
QTest.qWait(self.WAIT_TIMEOUT_BEFORE_NEW)
self.form.add_files([get_path_for_data_file("protocol.proto.xml")])
self.assertEqual(self.form.signal_tab_controller.signal_frames[0].ui.lSignalTyp.text(), "Protocol")
def test_selection_sync(self):
self.add_signal_to_form("esaver.complex")
frame = self.form.signal_tab_controller.signal_frames[0]
frame.ui.cbProtoView.setCurrentIndex(0) # set to bit view
frame.ui.gvSignal.selection_area.end = 128440
frame.ui.gvSignal.selection_area.start = 89383
frame.ui.gvSignal.sel_area_start_end_changed.emit(89383, 128440)
QApplication.instance().processEvents()
QTest.qWait(100)
self.assertEqual(frame.proto_analyzer.messages[0].plain_bits_str, frame.ui.txtEdProto.selected_text.strip())
frame.ui.txtEdProto.show_proto_clicked.emit()
QApplication.instance().processEvents()
self.assertAlmostEqual((128440 - 89383) / 1000000,
(frame.ui.gvSignal.view_rect().width()) / 1000000, places=1)
def test_demodulated_view(self):
self.add_signal_to_form("esaver.complex")
frame = self.form.signal_tab_controller.signal_frames[0]
frame.ui.cbSignalView.setCurrentIndex(1)
QApplication.instance().processEvents()
self.assertEqual(frame.ui.gvSignal.scene_type, 1)
if self.SHOW:
self.assertTrue(frame.ui.gvLegend.isVisible())
def test_uncompress_archives(self):
temp_dir = tempfile.gettempdir()
os.chdir(temp_dir)
with tarfile.open("test.tar.gz", "w:gz") as tar:
for name in ["1.complex", "2.complex", "3.complex"]:
data = np.ndarray(10, dtype=np.complex64)
data.tofile(name)
tar.add(name)
with ZipFile('test.zip', 'w') as zip:
for name in ["4.complex", "5.complex"]:
data = np.ndarray(10, dtype=np.complex64)
data.tofile(name)
zip.write(name)
QApplication.instance().processEvents()
QTest.qWait(self.WAIT_TIMEOUT_BEFORE_NEW)
self.form.add_files(FileOperator.uncompress_archives(["test.tar.gz", "test.zip"], QDir.tempPath()))
self.assertEqual(len(self.form.signal_tab_controller.signal_frames), 5)
tar_md5 = hashlib.md5(open(os.path.join(temp_dir, "test.tar.gz"), 'rb').read()).hexdigest()
self.form.signal_tab_controller.signal_frames[0].signal._fulldata = np.ones(5, dtype=np.complex64)
self.form.signal_tab_controller.signal_frames[0].signal.changed = True
self.form.signal_tab_controller.signal_frames[0].ui.btnSaveSignal.click()
tar_md5_after_save = hashlib.md5(open(os.path.join(temp_dir, "test.tar.gz"), 'rb').read()).hexdigest()
self.assertNotEqual(tar_md5, tar_md5_after_save)
zip_md5 = hashlib.md5(open(os.path.join(temp_dir, "test.zip"), 'rb').read()).hexdigest()
self.form.signal_tab_controller.signal_frames[4].signal._fulldata = np.ones(5, dtype=np.complex64)
self.form.signal_tab_controller.signal_frames[4].signal.changed = True
self.form.signal_tab_controller.signal_frames[4].ui.btnSaveSignal.click()
zip_md5_after_save = hashlib.md5(open(os.path.join(temp_dir, "test.zip"), 'rb').read()).hexdigest()
self.assertNotEqual(zip_md5, zip_md5_after_save)
def test_options_changed(self):
self.add_signal_to_form("esaver.complex")
self.form.on_options_changed({"show_pause_as_time": True, "default_view": 2})
QApplication.instance().processEvents()
self.assertEqual(self.form.signal_tab_controller.signal_frames[0].ui.cbProtoView.currentIndex(), 2)