class AppWindow(QDialog): def __init__(self): super().__init__() # self.ui = loadUi('main.ui', self) self.ui = Ui_Dialog() self.ui.setupUi(self) self.ui.btn_select.clicked.connect(self.openFileNameDialog) self.msg = '請選擇 Jenkins SQL資料夾目錄,該目錄裡面有Procedures和Packages兩個子目錄。' self.bfmsg = '' self.it = None self.v_process = 0 self.ui.progressBar.setValue(0) self.timer = QTimer() self.timer.timeout.connect(self.update) self.timer.start(1000) def update(self): if self.it: self.ui.progressBar.setValue(self.it.v_process) diffmsg = self.msg.replace(self.bfmsg, '') if diffmsg: self.ui.textBrowser.append(diffmsg) self.bfmsg = self.msg def openFileNameDialog(self): dirName = QFileDialog.getExistingDirectory(self, "選取資料夾") if dirName: self.log(dirName) self.it = FortifyDummyFix(self) self.thread = Worker() self.thread.setup(self.it, dirName) self.thread.start() def log(self, msg): self.msg += '\n' + msg
class Fitz(QtWidgets.QDialog): def __init__(self): super().__init__() self.ui = Ui_Dialog() self.ui.setupUi(self)
from PyQt5 import QtWidgets from main import Ui_Dialog if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) widget = QtWidgets.QDialog() ui = Ui_Dialog() ui.setupUi(widget) widget.show() sys.exit(app.exec_())
class MainApp(QDialog): def __init__(self): super().__init__() self.main = Ui_Dialog() self.main.setupUi(self) self.showNormal() self.setFocus() def init_signals_slots(self): self.main.updateListPushButton.clicked.connect( self.update_via_api_meter_list_table) self.main.testConnectionpushButton.clicked.connect( self.check_team_connection_status_thread) self.main.saveCommandLinkButton.clicked.connect(self.hide) self.main.hostNameLineEdit.textChanged.connect( self.update_config_hostname) self.main.portNumberLineEdit.textChanged.connect( self.update_config_portnumber) #self.main.meterTableWidget.itemClicked.connect( self.get_selected_items ) self.main.saveSelectedMeterListPushButton.clicked.connect( self.update_config_selected_meterslist) self.main.fileDialogPushButton.clicked.connect( self.update_config_reportsfolder) def load_user_config(self): #print("Load User Config") with open('config.json', 'r') as f: config = json.load(f) #print("Current Config: {}".format( str( config ) )) host = config['hostname'] port = config['portnumber'] reportsFolder = config['reportsFolder'] self.main.hostNameLineEdit.setText(str(host)) self.main.portNumberLineEdit.setText(str(port)) self.main.reportsFolderLineEdit.setText(str(reportsFolder)) QApplication.processEvents() def get_config_meterlist(self): config = "" with open('config.json', 'r') as f: config = json.load(f) return json.loads(config['meterList'].replace("\'", "\"")) def update_user_config(self, setting, newVal): #print("Update User Config") config = "" with open('config.json', 'r') as f: config = json.load(f) with open('config.json', 'w') as f: config[str(setting)] = str(newVal) json.dump(config, f) def update_config_hostname(self): hostname = self.main.hostNameLineEdit.text() self.update_user_config('hostname', hostname) def update_config_portnumber(self): portnumber = self.main.portNumberLineEdit.text() self.update_user_config('portnumber', portnumber) def update_config_reportsfolder(self): reportDirectory = "" options = QFileDialog.Options() options |= QFileDialog.DontUseNativeDialog #fileName, _ = QFileDialog.getOpenFileName(self,"PQ Reports Folder", "","All Files (*);;Excel Files (*.csv)", options=options) reportDirectory = QFileDialog.getExistingDirectory( self, "PQ Reports Folder") print("{}".format(reportDirectory)) if reportDirectory: self.main.reportsFolderLineEdit.setText(reportDirectory) self.update_user_config('reportsFolder', reportDirectory) def update_config_meterlist(self, meterListJSON): self.update_user_config('meterList', meterListJSON) def check_team_connection_status(self): hostname = self.main.hostNameLineEdit.text() portnumber = self.main.portNumberLineEdit.text() if (hostname != "" and portnumber != ""): base_api = "http://{}:{}".format(hostname, portnumber) else: base_api = "http://localhost:5630" try: r = reqs.get("{}/api/team/version".format(base_api)) js_data = r.json()["data"] masterDbVersion = js_data["masterDbVersion"] self.main.connectionStatusLabel.setText("Client Connected") except Exception as e: self.main.connectionStatusLabel.setText( "Client Connection Failed !") def check_team_connection_status_thread(self): func_thread_inst(func=self.check_team_connection_status) def init_meter_list_table(self): meterList = self.get_config_meterlist() row_len = len(meterList) self.main.meterTableWidget.setRowCount(row_len) self.main.meterTableWidget.setColumnCount(3) self.main.meterTableWidget.setHorizontalHeaderLabels( ["ID", "Meter Name", "Included"]) row = 0 col = 0 for meterObj in meterList: self.main.meterTableWidget.setItem( row, col, QTableWidgetItem(str(meterObj['deviceId']))) self.main.meterTableWidget.setItem( row, col + 1, QTableWidgetItem(str(meterObj['deviceName']))) self.main.meterTableWidget.setItem( row, col + 2, QTableWidgetItem(str(meterObj['selected']))) row += 1 def update_via_api_meter_list_table(self): global sb, m #QMessageBox.about(self, "Click Event", "Update meter list table") deviceNames = [] deviceIds = [] pageData = [] try: sb.run() sb.update_progress(0, 1) pageData = get_device_list(sb) sb.finish() deviceIds, deviceNames = get_meter_list(pageData) except Exception as e: QMessageBox.warning(self, "Error Event", str(e)) #meterList = [{"deviceId": 1, "deiceName":"LEW_735"}, {"deviceId": 2, "deviceName":"Zocholl_M_735"}] row_len = len(deviceIds) self.main.meterTableWidget.setRowCount(row_len) self.main.meterTableWidget.setColumnCount(3) self.main.meterTableWidget.setHorizontalHeaderLabels( ["ID", "Meter Name", "Included"]) row = 0 col = 0 meterListJSON = [] for id, dn in zip(deviceIds, deviceNames): self.main.meterTableWidget.setItem(row, col, QTableWidgetItem(str(id))) self.main.meterTableWidget.setItem(row, col + 1, QTableWidgetItem(str(dn))) self.main.meterTableWidget.setItem(row, col + 2, QTableWidgetItem("false")) meterListJSON.append({ "deviceId": id, "deviceName": dn, "selected": "false" }) row += 1 self.update_config_meterlist(meterListJSON) msg = QMessageBox() msg.setIcon(QMessageBox.Information) msg.setText("Please reselect meters to be included in the PQ report.") msg.setWindowTitle("Meter List Updated") msg.setStandardButtons(QMessageBox.Ok) retval = msg.exec_() def update_config_selected_meterslist(self): meterListFull = self.get_config_meterlist() full_list_len = len(meterListFull) selectedItems = self.main.meterTableWidget.selectedItems() selected_list_len = len(selectedItems) - 1 device_id = "" for k in range(full_list_len): device_id = meterListFull[k]['deviceId'] meterListFull[k]['selected'] = "false" for i in range(selected_list_len): #print("Selected Item: {}".format( str(selectedItems[i].text()) )) deviceId = selectedItems[i].text() if str(deviceId) in str(device_id): meterListFull[k]['selected'] = "true" break self.update_config_meterlist(meterListFull) self.init_meter_list_table() msg = QMessageBox() msg.setIcon(QMessageBox.Information) msg.setText("PQ report meter list updated !") msg.setWindowTitle("Meter Selection") msg.setStandardButtons(QMessageBox.Ok) retval = msg.exec_()
class huxly(QtWidgets.QDialog): def __init__(self): super().__init__() self.ui = Ui_Dialog() self.ui.setupUi(self) self.signals_init() self.ui.verticalSlider.setMaximum(50) self.ui.verticalSlider.setMinimum(-5) self.ui.verticalSlider.setSingleStep(0.1) self.ui.lineEdit.setText(str(self.ui.verticalSlider.value())) self.run_the_simu() def closeEvent(self, event): self.anim._stop() def signals_init(self): self.ui.verticalSlider.valueChanged.connect(self.slider_changed) self.ui.lineEdit.returnPressed.connect(self.lineEditChanged) def run_the_simu(self): self.I = float(self.ui.lineEdit.text()) v = -63 n = 0 m = 0 h = 0 dt = 0.001 t_total = 10 t = np.arange(0, t_total, dt) self.t = t self.v_list, self.n_list, self.m_list, self.h_list, self.N_spikes = experiment_run( v, n, m, h, self.I, t_total, dt) self.run_animation() def run_animation(self): self.ui.widget.canvas.ax1.plot(self.t, self.v_list, '--', alpha=0.5, label='v_list') self.ui.widget.canvas.ax1.set_xticks([]) self.ui.widget.canvas.ax1.set_ylabel('V') self.ui.widget.canvas.ax2.plot(self.t, self.n_list, '--', alpha=0.5, label='n_list') self.ui.widget.canvas.ax2.set_xticks([]) self.ui.widget.canvas.ax2.set_ylabel('n') self.ui.widget.canvas.ax3.plot(self.t, self.h_list, '--', alpha=0.5, label='h_list') self.ui.widget.canvas.ax3.set_xticks([]) self.ui.widget.canvas.ax3.set_ylabel('h') self.ui.widget.canvas.ax4.plot(self.t, self.m_list, '--', alpha=0.5, label='h_list') self.ui.widget.canvas.ax4.set_ylabel('m') self.ui.widget.canvas.ax4.set_xlabel('t ($ms$)') self.ui.widget.canvas.ax5.plot(self.n_list, self.v_list, '--') self.ui.widget.canvas.ax5.set_xlabel('n') self.ui.widget.canvas.ax5.set_ylabel('v') Lines = [ self.ui.widget.canvas.line1, self.ui.widget.canvas.line2, self.ui.widget.canvas.line3, self.ui.widget.canvas.line4, self.ui.widget.canvas.line5 ] Pathes = [[self.t, self.v_list], [self.t, self.n_list], [self.t, self.h_list], [self.t, self.m_list], [self.n_list, self.v_list]] init_data = [[self.t[0], self.v_list[0]], [self.t[0], self.n_list[0]], [self.t[0], self.h_list[0]], [self.t[0], self.m_list[0]], [self.n_list[0], self.v_list[0]]] draw_mode = ['line', 'line', 'line', 'line', 'dot'] animobj = Animationcls(Lines, Pathes, init_data, self.ui.widget.canvas.fig, draw_mode) self.anim = animobj.start_animation() def slider_changed(self, value): self.ui.lineEdit.setText(str(value)) self.anim._stop() self.clear_axes() self.run_the_simu() def lineEditChanged(self): value = self.ui.lineEdit.text() self.ui.verticalSlider.setValue(float(value)) self.anim._stop() self.clear_axes() self.run_the_simu() def clear_axes(self): self.ui.widget.canvas.ax1.clear() self.ui.widget.canvas.ax2.clear() self.ui.widget.canvas.ax3.clear() self.ui.widget.canvas.ax4.clear() self.ui.widget.canvas.ax5.clear()