def createIntegerLineEdit(self, minimum=None, maximum=None, placeholder=""): line_edit = ClearableLineEdit(placeholder=placeholder) validator = QIntValidator() if minimum is not None: validator.setBottom(minimum) if maximum is not None: validator.setTop(maximum) line_edit.setValidator(validator) return line_edit
def __set_validators(self): ''' set validators for edit fields ''' validator_positive_integer = QIntValidator() validator_positive_integer.setBottom(0) validator_positive_double = MyDoubleValidator(True, self) validator_zero_one = MyZeroOneValidator(self) self.edit_specific_data_0.setValidator(validator_positive_double) self.edit_specific_data_1.setValidator(validator_positive_double) self.edit_specific_data_2.setValidator(validator_positive_double) self.edit_geometry_coeficient.setValidator(validator_positive_double) self.edit_geometry_type.setValidator(validator_positive_integer) self.edit_storativity.setValidator(validator_zero_one) self.editl_dual_porosity.setValidator(validator_zero_one) self.edit_type.setValidator(validator_positive_integer)
def __init__(self, parent=None, aptinkerQSettings=None): """Constructor""" QDialog.__init__(self, parent=parent) self.setupUi(self) self.setWindowFlags(Qt.Window) # To add Maximize & Minimize buttons self.setWindowTitle('Select Snapshot from Database') # Load Startup Preferences for Snapshot Table self.default_ss_pref = dict( vis_col_key_list=config.DEF_VIS_COL_KEYS['snapshot_DB'][:]) if osp.exists(PREF_SS_JSON_FILEPATH): with open(PREF_SS_JSON_FILEPATH, 'r') as f: self.ss_pref = json.load(f) else: self.ss_pref = self.default_ss_pref # Load Startup Preferences for Snapshot Meta Table self.default_ss_meta_pref = dict(vis_col_key_list=[ 'ss_id', 'config_id', 'ss_ctime', 'ss_name', 'ss_username' ]) if osp.exists(PREF_SS_META_JSON_FILEPATH): with open(PREF_SS_META_JSON_FILEPATH, 'r') as f: self.ss_meta_pref = json.load(f) else: self.ss_meta_pref = self.default_ss_meta_pref self.ssDBViewWidget = SnapshotDBViewWidget(self.groupBox_selected_ss, DB_selector=True) self.tableView_ss = self.ssDBViewWidget.tableView self.ssMetaDBViewWidget = SnapshotMetaDBViewWidget( self.groupBox_search_result) self.tableView_ss_meta = self.ssMetaDBViewWidget.tableView self.textEdit_description = \ self.ssMetaDBViewWidget.textEdit_description self.settings = QSettings('APHLA', 'TinkerSSDBSelector') self.loadViewSettings() self._aptinkerQSettings = aptinkerQSettings self.pushButton_search.setIcon(QIcon(':/search.png')) all_ctime_operators = [ self.comboBox_time_created_1.itemText(i) for i in range(self.comboBox_time_created_1.count()) ] self.comboBox_time_created_1.setCurrentIndex( all_ctime_operators.index('')) self.dateTimeEdit_time_created_1.setDateTime( QDateTime.currentDateTime()) self.dateTimeEdit_time_created_2.setDateTime( QDateTime.currentDateTime()) self.search_params = dict(ss_id_1='', ss_id_2='', config_id_1='', config_id_2='', ss_ref_step_size_1='', ss_ref_step_size_2='', ss_name='', ss_desc='', ss_username='', ss_ctime_1='', ss_ctime_2='', ss_synced_gruop_weight='', ss_masar_id_1='', ss_masar_id_2='') db_id_validator = QIntValidator() db_id_validator.setBottom(1) self.lineEdit_ss_id_1.setValidator(db_id_validator) self.lineEdit_ss_id_2.setValidator(db_id_validator) self.lineEdit_config_id_1.setValidator(db_id_validator) self.lineEdit_config_id_2.setValidator(db_id_validator) self.lineEdit_masar_id_1.setValidator(db_id_validator) self.lineEdit_masar_id_2.setValidator(db_id_validator) self.prev_valid_ref_step_sizes = dict(lineEdit_ref_step_size_1=np.nan, lineEdit_ref_step_size_2=np.nan) # Set up Snapshot Table self.ss_model = SnapshotModel(self.ss_pref['vis_col_key_list']) self.tableModel_ss = self.ss_model.table proxyModel = QSortFilterProxyModel() proxyModel.setSourceModel(self.tableModel_ss) proxyModel.setDynamicSortFilter(False) tbV = self.tableView_ss tbV.setModel(proxyModel) tbV.setItemDelegate( SnapshotDBTableViewItemDelegate(tbV, self.tableModel_ss, tbV.parent())) #self.db = TinkerMainDatabase() self.db = self.ss_model.db if '[ss_meta_table text view]' not in self.db.getViewNames( square_brackets=True): self.db.create_temp_ss_meta_table_text_view() # Set up Snapshot Meta Table self.ss_meta_all_col_keys = self.ssMetaDBViewWidget.all_col_keys self.search_result = {k: [] for k in self.ss_meta_all_col_keys} self.tableModel_ss_meta = MetaTableModel(self.search_result, self.ssMetaDBViewWidget) proxyModel = QSortFilterProxyModel() proxyModel.setSourceModel(self.tableModel_ss_meta) proxyModel.setDynamicSortFilter(False) tbV = self.tableView_ss_meta tbV.setModel(proxyModel) self.selectionModel = QItemSelectionModel(proxyModel) tbV.setSelectionModel(self.selectionModel) # Apply Visible Column Preference to Snapshot Meta Table ss_meta_vis_col_name_list = [ self.ssMetaDBViewWidget.col_names_wo_desc[ self.ssMetaDBViewWidget.col_keys_wo_desc.index(k)] for k in self.ss_meta_pref['vis_col_key_list'] ] self.ssMetaDBViewWidget.on_column_selection_change( ss_meta_vis_col_name_list, force_visibility_update=True) # Make connection self.connect(self.lineEdit_ref_step_size_1, SIGNAL('editingFinished()'), self.validate_ref_step_size) self.connect(self.lineEdit_ref_step_size_2, SIGNAL('editingFinished()'), self.validate_ref_step_size) self.connect(self.pushButton_search, SIGNAL('clicked()'), self.update_search) self.connect( self.selectionModel, SIGNAL( 'currentRowChanged(const QModelIndex &, const QModelIndex &)'), self.on_selection_change)
def __init__(self, parent=None, aptinkerQSettings=None): """Constructor""" QDialog.__init__(self, parent=parent) self.setupUi(self) self.setWindowFlags(Qt.Window) # To add Maximize & Minimize buttons self.setWindowTitle('Select Snapshot from Database') # Load Startup Preferences for Snapshot Table self.default_ss_pref = dict( vis_col_key_list=config.DEF_VIS_COL_KEYS['snapshot_DB'][:]) if osp.exists(PREF_SS_JSON_FILEPATH): with open(PREF_SS_JSON_FILEPATH, 'r') as f: self.ss_pref = json.load(f) else: self.ss_pref = self.default_ss_pref # Load Startup Preferences for Snapshot Meta Table self.default_ss_meta_pref = dict( vis_col_key_list=['ss_id', 'config_id', 'ss_ctime', 'ss_name', 'ss_username']) if osp.exists(PREF_SS_META_JSON_FILEPATH): with open(PREF_SS_META_JSON_FILEPATH, 'r') as f: self.ss_meta_pref = json.load(f) else: self.ss_meta_pref = self.default_ss_meta_pref self.ssDBViewWidget = SnapshotDBViewWidget(self.groupBox_selected_ss, DB_selector=True) self.tableView_ss = self.ssDBViewWidget.tableView self.ssMetaDBViewWidget = SnapshotMetaDBViewWidget( self.groupBox_search_result) self.tableView_ss_meta = self.ssMetaDBViewWidget.tableView self.textEdit_description = \ self.ssMetaDBViewWidget.textEdit_description self.settings = QSettings('APHLA', 'TinkerSSDBSelector') self.loadViewSettings() self._aptinkerQSettings = aptinkerQSettings self.pushButton_search.setIcon(QIcon(':/search.png')) all_ctime_operators = [ self.comboBox_time_created_1.itemText(i) for i in range(self.comboBox_time_created_1.count())] self.comboBox_time_created_1.setCurrentIndex( all_ctime_operators.index('')) self.dateTimeEdit_time_created_1.setDateTime( QDateTime.currentDateTime()) self.dateTimeEdit_time_created_2.setDateTime( QDateTime.currentDateTime()) self.search_params = dict( ss_id_1='', ss_id_2='', config_id_1='', config_id_2='', ss_ref_step_size_1='', ss_ref_step_size_2='', ss_name='', ss_desc='', ss_username='', ss_ctime_1='', ss_ctime_2='', ss_synced_gruop_weight='', ss_masar_id_1='', ss_masar_id_2='') db_id_validator = QIntValidator() db_id_validator.setBottom(1) self.lineEdit_ss_id_1.setValidator(db_id_validator) self.lineEdit_ss_id_2.setValidator(db_id_validator) self.lineEdit_config_id_1.setValidator(db_id_validator) self.lineEdit_config_id_2.setValidator(db_id_validator) self.lineEdit_masar_id_1.setValidator(db_id_validator) self.lineEdit_masar_id_2.setValidator(db_id_validator) self.prev_valid_ref_step_sizes = dict( lineEdit_ref_step_size_1=np.nan, lineEdit_ref_step_size_2=np.nan) # Set up Snapshot Table self.ss_model = SnapshotModel(self.ss_pref['vis_col_key_list']) self.tableModel_ss = self.ss_model.table proxyModel = QSortFilterProxyModel() proxyModel.setSourceModel(self.tableModel_ss) proxyModel.setDynamicSortFilter(False) tbV = self.tableView_ss tbV.setModel(proxyModel) tbV.setItemDelegate(SnapshotDBTableViewItemDelegate( tbV, self.tableModel_ss, tbV.parent())) #self.db = TinkerMainDatabase() self.db = self.ss_model.db if '[ss_meta_table text view]' not in self.db.getViewNames( square_brackets=True): self.db.create_temp_ss_meta_table_text_view() # Set up Snapshot Meta Table self.ss_meta_all_col_keys = self.ssMetaDBViewWidget.all_col_keys self.search_result = {k: [] for k in self.ss_meta_all_col_keys} self.tableModel_ss_meta = MetaTableModel( self.search_result, self.ssMetaDBViewWidget) proxyModel = QSortFilterProxyModel() proxyModel.setSourceModel(self.tableModel_ss_meta) proxyModel.setDynamicSortFilter(False) tbV = self.tableView_ss_meta tbV.setModel(proxyModel) self.selectionModel = QItemSelectionModel(proxyModel) tbV.setSelectionModel(self.selectionModel) # Apply Visible Column Preference to Snapshot Meta Table ss_meta_vis_col_name_list = [ self.ssMetaDBViewWidget.col_names_wo_desc[ self.ssMetaDBViewWidget.col_keys_wo_desc.index(k)] for k in self.ss_meta_pref['vis_col_key_list']] self.ssMetaDBViewWidget.on_column_selection_change( ss_meta_vis_col_name_list, force_visibility_update=True) # Make connection self.connect(self.lineEdit_ref_step_size_1, SIGNAL('editingFinished()'), self.validate_ref_step_size) self.connect(self.lineEdit_ref_step_size_2, SIGNAL('editingFinished()'), self.validate_ref_step_size) self.connect(self.pushButton_search, SIGNAL('clicked()'), self.update_search) self.connect( self.selectionModel, SIGNAL( 'currentRowChanged(const QModelIndex &, const QModelIndex &)'), self.on_selection_change )
from PyQt5.QtWidgets import (QActionGroup, QVBoxLayout, QMenu, QFileDialog, QMessageBox, QLineEdit, QGridLayout, QWidget, QApplication, QPushButton, QAction, QMainWindow, QTabWidget, QTableWidget, QTableWidgetItem, QLabel, QComboBox, QListWidget) import logging logger = logging.getLogger(__name__) sys.path.append('.') sys.path.append('..') from strtypes import strlist, BOOL from daqController import worker, remove_slot from daqAnalysis import daqCollection from networking.client import PyClient double_validator = QDoubleValidator() # floats int_validator = QIntValidator() # integers int_validator.setBottom(0) # don't allow -ve numbers bool_validator = QIntValidator(0,1) # boolean, 0=False, 1=True def channel_stats(text): """Convert a string list of channel settings into an ordered dictionary: "[['Dev2/ai0', '', '1.0', '0.0', '0', '0', '0']]" -> OrderedDict([('Dev2/ai0', {'label':'', 'offset':1.0, 'range':0, 'acquire':0, 'plot':0})]) """ d = OrderedDict() keys = ['label', 'scale', 'offset', 'range', 'acquire', 'plot'] types = [str, float, float, float, BOOL, BOOL] for channel in map(strlist, re.findall("\[['\w,\s\./]+\]", text)): d[channel[0]] = OrderedDict([(keys[i], types[i](val)) for i, val in enumerate(channel[1:])])
def __init__(self, status, actions): super (I2CControlView, self).__init__() self.status = status self.actions = actions f = open(I2C_DESC_LOC, 'r') s = f.read() f.close() s = s.split("DESCRIPTION START")[1] s = s.split("DESCRIPTION END")[0] #print "s: %s" % s i2c_desc = QLabel(s) i2c_desc.setMaximumWidth(500) i2c_desc.setWordWrap(True) i2c_desc.setAlignment(QtCore.Qt.AlignTop) run_button = QPushButton("Run") run_button.setToolTip("Execute the I2C Transaction") run_button.clicked.connect(self.actions.i2c_run) reload_button = QPushButton("Reload") reload_button.setToolTip("Reload I2C Transactions") reload_button.clicked.connect(self.actions.i2c_run) pause_button = QPushButton("Pause") pause_button.setToolTip("Pause I2C Execution flow") pause_button.clicked.connect(self.actions.i2c_pause) stop_button = QPushButton("Stop") stop_button.setToolTip("Stop I2C Execution") stop_button.clicked.connect(self.actions.i2c_stop) reset_button = QPushButton("Reset") reset_button.setToolTip("Reset the current execution") reset_button.clicked.connect(self.actions.i2c_reset) step_button = QPushButton("Step") step_button.setToolTip("Execute one I2C Transaction") step_button.clicked.connect(self.actions.i2c_step) loop_step_button = QPushButton("Loop Step") loop_step_button.setToolTip("Iterate through the I2C Loop one time") loop_step_button.clicked.connect(self.actions.i2c_loop_step) update_delay_button = QPushButton("Update Delay (ms)") update_delay_button.setToolTip("Update the delay in ms between I2C Transactions") update_delay_button.clicked.connect(self.update_delay) self.delay_le = QLineEdit("100") self.delay_le.setAlignment(QtCore.Qt.AlignRight) v = QIntValidator() v.setBottom(1) self.execute_status = QLabel("Idle") self.default_slave_addr = QLineEdit() self.default_slave_addr.setAlignment(QtCore.Qt.AlignRight) self.default_slave_addr.setText("0x10") self.default_slave_addr.textChanged.connect(self.custom_validator) self.default_slave_addr.returnPressed.connect(self.update_all_slave_addresses) self.update_all_slave_addr = QPushButton("Update All Slave Addr") self.update_all_slave_addr.clicked.connect(self.update_all_slave_addresses) layout = QGridLayout() layout.addWidget(i2c_desc, 0, 0, 1, 2) #Add Default I2C Address default_addr_layout = QGridLayout() default_addr_layout.addWidget(QLabel("Default Slave Addr"), 0, 0, 1, 1) default_addr_layout.addWidget(self.default_slave_addr, 0, 1, 1, 1) default_addr_layout.addWidget(self.update_all_slave_addr, 1, 0, 1, 2) #Add Buttons/Status Layout layout.addLayout(default_addr_layout, 2, 0, 1, 2) buttons_layout = QGridLayout() buttons_layout.addWidget(run_button, 0, 0, 1, 2) buttons_layout.addWidget(reload_button, 1, 0, 1, 2) buttons_layout.addWidget(step_button, 2, 0, 1, 2) buttons_layout.addWidget(loop_step_button, 3, 0, 1, 2) buttons_layout.addWidget(pause_button, 4, 0, 1, 2) buttons_layout.addWidget(stop_button, 5, 0, 1, 2) buttons_layout.addWidget(reset_button, 6, 0, 1, 2) buttons_layout.addWidget(update_delay_button, 7, 0, 1, 1) buttons_layout.addWidget(self.delay_le, 7, 1, 1, 1) buttons_layout.addWidget(QLabel("Status:"), 8, 0, 1, 1) buttons_layout.addWidget(self.execute_status, 8, 1, 1, 1) layout.addLayout(buttons_layout, 3, 0, 1, 2) self.actions.i2c_execute_status_update.connect(self.status_update) self.setLayout(layout)