def disconnect(self): # remove table nodes l = [] for r in self.tableManager.tableItems: l.append(r[1]) self.tableManager.removeRows(l) #remove remaining nodes for i in set(self.nodes): try: self.uaclient.unsubscribe_datachange(i) except Exception as e: logging.warning("Failed to unsubscribe variable: " + i.nodeid.Identifier) self.show_error(e) self.nodes.clear() for p in self.plotManagers: p.node = None try: self.uaclient.disconnect() except Exception as ex: self.show_error(ex) raise finally: self.save_current_node() self.tree_ui.clear() #reset handler and uaclient self.handler = DataChangeHandler() self.uaclient = UaClient() self.handler.fire.connect(self.updateNode, type=Qt.QueuedConnection)
def __init__(self): QMainWindow.__init__(self) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.setWindowIcon(QIcon(":/network.svg")) # fix stuff imposible to do in qtdesigner # remove dock titlebar for addressbar w = QWidget() self.ui.addrDockWidget.setTitleBarWidget(w) # tabify some docks self.tabifyDockWidget(self.ui.evDockWidget, self.ui.subDockWidget) self.tabifyDockWidget(self.ui.subDockWidget, self.ui.refDockWidget) self.tabifyDockWidget(self.ui.refDockWidget, self.ui.graphDockWidget) # we only show statusbar in case of errors self.ui.statusBar.hide() # setup QSettings for application and get a settings object QCoreApplication.setOrganizationName("FreeOpcUa") QCoreApplication.setApplicationName("OpcUaClient") self.settings = QSettings() self._address_list = self.settings.value("address_list", [ "opc.tcp://localhost:4840", "opc.tcp://localhost:53530/OPCUA/SimulationServer/" ]) self._address_list_max_count = int( self.settings.value("address_list_max_count", 10)) # init widgets for addr in self._address_list: self.ui.addrComboBox.insertItem(-1, addr) self.uaclient = UaClient() self.tree_ui = TreeWidget(self.ui.treeView) self.tree_ui.error.connect(self.show_error) self.setup_context_menu_tree() self.ui.treeView.selectionModel().currentChanged.connect( self._update_actions_state) self.refs_ui = RefsWidget(self.ui.refView) self.refs_ui.error.connect(self.show_error) self.attrs_ui = AttrsWidget(self.ui.attrView) self.attrs_ui.error.connect(self.show_error) self.datachange_ui = DataChangeUI(self, self.uaclient) self.event_ui = EventUI(self, self.uaclient) self.graph_ui = GraphUI(self, self.uaclient) self.ui.addrComboBox.currentTextChanged.connect(self._uri_changed) self._uri_changed(self.ui.addrComboBox.currentText() ) # force update for current value at startup self.ui.treeView.selectionModel().selectionChanged.connect( self.show_refs) self.ui.actionCopyPath.triggered.connect(self.tree_ui.copy_path) self.ui.actionCopyNodeId.triggered.connect(self.tree_ui.copy_nodeid) self.ui.actionCall.triggered.connect(self.call_method) self.ui.treeView.selectionModel().selectionChanged.connect( self.show_attrs) self.ui.attrRefreshButton.clicked.connect(self.show_attrs) self.resize(int(self.settings.value("main_window_width", 800)), int(self.settings.value("main_window_height", 600))) data = self.settings.value("main_window_state", None) if data: self.restoreState(data) self.ui.connectButton.clicked.connect(self.connect) self.ui.disconnectButton.clicked.connect(self.disconnect) # self.ui.treeView.expanded.connect(self._fit) self.ui.actionConnect.triggered.connect(self.connect) self.ui.actionDisconnect.triggered.connect(self.disconnect) self.ui.connectOptionButton.clicked.connect( self.show_connection_dialog)
def __init__(self, args, parent=None): super(MicroDAQviewer_live, self).__init__(parent) self.setupUi(self) self.handler = DataChangeHandler() self.handler.fire.connect(self.updateNode, type=Qt.QueuedConnection) self.nodes = [] self.plotManagers = [] global signal_counter self.nPlots = args.nPlots # add graph widgets if self.nPlots <= 2 or self.nPlots == 4: nMax = 2 else: nMax = 3 if self.nPlots == 1: signal_counter = 0 self.plotManagers.append(PlotManager(self, 0)) self.gridLayout.addWidget(self.plotManagers[0].plot) else: for i in range(self.nPlots): signal_counter = i self.plotManagers.append(PlotManager(self, i)) self.gridLayout.addWidget(self.plotManagers[i].plot, i % nMax, i / nMax) self.plotManagers[i].plot.setTitle("Plot #" + str(i)) self.settings = QSettings() self._address_list = self.settings.value("address_list", [ "opc.tcp://149.220.224.32:12000", "opc.tcp://149.220.63.187:12000", "opc.tcp://localhost:11000" ]) self._address_list_max_count = int( self.settings.value("address_list_max_count", 10)) # init widgets for addr in self._address_list: self.comboBox.insertItem(-1, addr) self.uaclient = UaClient() self.tree_ui = TreeWidget(self.treeView) self.comboBox.currentTextChanged.connect(self._uri_changed) self.connectButton.clicked.connect(self.connect) self.disconnectButton.clicked.connect(self.disconnect) # enable context menu in tree widget self.treeView.setContextMenuPolicy(Qt.CustomContextMenu) self.treeView.customContextMenuRequested.connect( self.openTreeContextMenu) # enable context menu in table widget self.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu) self.tableWidget.customContextMenuRequested.connect( self.openTableContextMenu) self.actionConnect.triggered.connect(self.connect) self.actionDisconnect.triggered.connect(self.disconnect) self.subscribed_nodes = [] self.tableManager = TableManager(self)
def __init__(self): QMainWindow.__init__(self) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.setWindowIcon(QIcon(":/network.svg")) # fix stuff imposible to do in qtdesigner # remove dock titlebar for addressbar w = QWidget() self.ui.addrDockWidget.setTitleBarWidget(w) # tabify some docks self.tabifyDockWidget(self.ui.evDockWidget, self.ui.subDockWidget) self.tabifyDockWidget(self.ui.subDockWidget, self.ui.refDockWidget) # we only show statusbar in case of errors self.ui.statusBar.hide() # load settings, seconds arg is default self.settings = QSettings("FreeOpcUa", "FreeOpcUaClient") self._address_list = self.settings.value("address_list", ["opc.tcp://localhost:4840", "opc.tcp://localhost:53530/OPCUA/SimulationServer/"]) self._address_list_max_count = int(self.settings.value("address_list_max_count", 10)) # init widgets for addr in self._address_list: self.ui.addrComboBox.insertItem(-1, addr) self.uaclient = UaClient() self.tree_ui = TreeWidget(self.ui.treeView) self.tree_ui.error.connect(self.show_error) self.refs_ui = RefsWidget(self.ui.refView) self.refs_ui.error.connect(self.show_error) self.attrs_ui = AttrsWidget(self.ui.attrView) self.attrs_ui.error.connect(self.show_error) self.datachange_ui = DataChangeUI(self, self.uaclient) self.event_ui = EventUI(self, self.uaclient) self.ui.treeView.activated.connect(self.show_refs) self.ui.treeView.clicked.connect(self.show_refs) self.ui.actionCopyPath.triggered.connect(self.tree_ui.copy_path) self.ui.actionCopyNodeId.triggered.connect(self.tree_ui.copy_nodeid) # add items to context menu self.ui.treeView.addAction(self.ui.actionCopyPath) self.ui.treeView.addAction(self.ui.actionCopyNodeId) self.ui.treeView.activated.connect(self.show_attrs) self.ui.treeView.clicked.connect(self.show_attrs) self.ui.attrRefreshButton.clicked.connect(self.show_attrs) self.resize(int(self.settings.value("main_window_width", 800)), int(self.settings.value("main_window_height", 600))) self.restoreState(self.settings.value("main_window_state", b"", type="QByteArray")) self.ui.connectButton.clicked.connect(self._connect) self.ui.disconnectButton.clicked.connect(self._disconnect) # self.ui.treeView.expanded.connect(self._fit) self.ui.actionConnect.triggered.connect(self._connect) self.ui.actionDisconnect.triggered.connect(self._disconnect) self.ui.modeComboBox.addItem("None") self.ui.modeComboBox.addItem("Sign") self.ui.modeComboBox.addItem("SignAndEncrypt") self.ui.policyComboBox.addItem("None") self.ui.policyComboBox.addItem("Basic128RSA15") self.ui.policyComboBox.addItem("Basic256") self.ui.policyComboBox.addItem("Basic256SHA256")