def init_action_attribute(self): action_h_box_layout = QHBoxLayout() action_h_box_layout.setGeometry(QRect(0, 0, 0, 0)) action_h_box_layout.setAlignment(QtCore.Qt.AlignRight) self.action_group_box.setStyleSheet("color: white;" "font-size: 20px;") execute_button = QPushButton("Execute") execute_alternative_scenario_button = QPushButton( "Execute with Alternative Scenario") execute_button.setStyleSheet(""" QPushButton { background-color: #5b5c5e; padding: 2px; min-height: 45px; min-width: 45px; border-radius: 10px; border-bottom: 1.5px solid black; border-right: 1px solid black; } QPushButton:hover:!pressed { background-color: #4d4d4d; } QPushButton:pressed { background-color: #5b5c5e; border: 1px solid black; } """) execute_alternative_scenario_button.setStyleSheet(""" QPushButton { background-color: #5b5c5e; padding: 2px; min-height: 45px; min-width: 45px; border-radius: 10px; border-bottom: 1.5px solid black; border-right: 1px solid black; } QPushButton:hover:!pressed { background-color: #4d4d4d; } QPushButton:pressed { background-color: #5b5c5e; border: 1px solid black; } """) execute_button.clicked.connect(self.execute_click) execute_alternative_scenario_button.clicked.connect(self.execute_alter) action_h_box_layout.addWidget(execute_alternative_scenario_button) action_h_box_layout.addWidget(execute_button) self.action_group_box.setLayout(action_h_box_layout)
def initWidget(self, ips): self.statusInfo = {} self.isStartWatch = False self.currentIP = None self.isMQConnected = False self.mMQClient = mqtt.Client(client_id='dtu-online-check-tool-tanxing-debug') self.timer = QTimer() vbox = QVBoxLayout() self.remind = QLabel("提示:从文件中导入DTU地址!") self.isImportData = False vbox.addWidget(self.remind) self.scrollArea = QScrollArea() self.scrollArea.setWidgetResizable(True) self.scrollAreaWidgetContents = QWidget() self.scrollAreaWidgetContents.setGeometry(QRect(0, 0, 388, 313)) h1box = QHBoxLayout() line = QFrame() line.setFrameShape(QFrame.HLine) line.setGeometry(QRect(40, 180, 400, 3)) addrLabel = QLabel("设备地址") h1box.addWidget(addrLabel) addrLabel.setAlignment(Qt.AlignCenter) onLineLabel = QLabel("在线状态 ") h1box.addWidget(onLineLabel) onLineLabel.setAlignment(Qt.AlignCenter) if isShowTime: timeLabel = QLabel("时间") timeLabel.setAlignment(Qt.AlignCenter) h1box.addWidget(timeLabel) h1box.setGeometry(QRect(0, 0, 100, 313)) vbox.addLayout(h1box) self.svbox = QVBoxLayout(self.scrollAreaWidgetContents) self.scrollArea.setWidget(self.scrollAreaWidgetContents) vbox.addWidget(self.scrollArea) bootmbox = QHBoxLayout() bootmbox.addWidget(QLabel("离线间隔")) self.comBox = QComboBox() bootmbox.addWidget(self.comBox) self.comBox.addItems(timeSpanList) bootmbox.addWidget(QLabel("分")) bootombox = QHBoxLayout() bootombox.addLayout(bootmbox) bootombox.addWidget(QLabel("")) self.checkBtn = QPushButton("开始监测") bootombox.addWidget(self.checkBtn) vbox.addLayout(bootombox) self.setLayout(vbox) self.checkBtn.clicked.connect(self.watch) self.timer.timeout.connect(self.refresh)
def stack2UI(self): # MANAGE STOCK UI with 3 tab options layout = QHBoxLayout() layout.setGeometry(QRect(0, 300, 1150, 500)) tabs = QTabWidget() self.tab1 = QWidget() self.tab2 = QWidget() self.tab3 = QWidget() tabs.addTab(self.tab1, 'Add Quantity') tabs.addTab(self.tab2, 'Reduce Quantity') tabs.addTab(self.tab3, 'Delete Stock') self.tab1UI() self.tab2UI() self.tab3UI() layout.addWidget(tabs) self.stack2.setLayout(layout)
class SettWin(QWidget): listnames = ['Программа настройки', 'Восстановить настройки указателя по умолчанию', 'Посетить сайт', 'Сбросить настройки программы', 'Системная рамка окна утилиты'] strtolist = 'Посетить сайт разработчика и автора программы, ' \ 'для получения дополнительной информации.' captions = ['Выполнить', 'Перейти', 'Сброс'] def __init__(self, parent=None, *args, **kwargs): super(SettWin, self).__init__(parent, *args, **kwargs) self.setWindowTitle('Settings') self.getsettUI() def getsettUI(self): vbx = QVBoxLayout(self) self.grid = QGridLayout() self.hbox = QHBoxLayout() closeBtn = CloseButton() closeBtn.clicked.connect(lambda: self.parent().getPrevious(self)) self.hbox.addWidget(closeBtn) self.btnh = closeBtn.sizeHint() vbx.addLayout(self.hbox) self.boxbuttons = QVBoxLayout() for caption in range(len(self.captions)): setBtns = ProjButton(self.captions[caption]) setBtns.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) background = ['#eeeff7', '#9aa9d5'] backimage = str('set_button2') if caption == 1: background = ['#4f587d', '#304563'] backimage = 'set_button1' setBtns.setStyleSheet(''' QPushButton{ background:%s url(accessory/images/%s.png); border-radius:18px;background-repeat:no-repeat; background-position:left;background-origin:content; padding-left:0.4em;font:bold 12px;color:#2b2e36; } QPushButton::pressed{ background:%s url(accessory/images/%s_Active.png); background-repeat:no-repeat; background-position:left; }''' % (background[0], backimage, background[1], backimage)) setBtns.setMaximumSize(170, 42) setBtns.setMinimumSize(setBtns.size()) setBtns.clicked.connect(partial(self.getvalBtns, caption)) self.boxbuttons.addWidget(setBtns) setcheckn = QCheckBox() """Проверка на существование обозначения, в файле настроек, программы `configfile.ini`""" checkstate = getPar().settings.value('checkstate') if checkstate is not None: setcheckn.setCheckState(int(checkstate)) else: setcheckn.setCheckState(Qt.Checked) setcheckn.setCursor(Qt.PointingHandCursor) setcheckn.setStyleSheet(""" QCheckBox::indicator{ background-color:#eeeff7; border:3px solid #4f587d; width:20px;height:20px; } QCheckBox::indicator:checked{ image:url(accessory/images/check.png); }""") setcheckn.resize(20,20) setcheckn.setMinimumSize(setcheckn.size()) setcheckn.stateChanged.connect(getPar().clickBox) self.boxbuttons.addWidget(setcheckn, 1, Qt.AlignHCenter) self.boxbuttons.setSpacing(30) vbx.addLayout(self.boxbuttons) self.setLayout(vbx) def getvalBtns(self, val): if val == 0: dlg = QDialog(self, Qt.Dialog | Qt.WindowTitleHint | Qt.WindowCloseButtonHint) dlg.setStyleSheet('''background-color:#81848c;''') dlg.resize(dlg.width() * 2.5, dlg.height() * 3.2) buttonBox = QDialogButtonBox(QDialogButtonBox.Ok) buttonBox.setCursor(Qt.PointingHandCursor) buttonBox.setStyleSheet(''' QPushButton{ background-color:#585b63;font-size:13px; border:1px solid #21242c;padding:0.2em 0; width:60px; } QPushButton::pressed{ background-color:#76798e;color:#ffffff; border-color:#a3a6bb; }''') buttonBox.setCenterButtons(True) buttonBox.accepted.connect(dlg.close) lbl = QLabel('Системные настройки указателя востнановленны.') lbl.setAlignment(Qt.AlignCenter) fnt = QFont('Helvetica, Arial, sans-serif', 10) fnt.setBold(True) lbl.setFont(fnt) lbl.setWordWrap(True) vlayout = QVBoxLayout() vlayout.addWidget(lbl) vlayout.addWidget(buttonBox) dlg.setLayout(vlayout) dlg.exec_() elif val == 1: launch_webbrowser('https://pcompstart.com/') elif val == 2: # QDialog - контейнер для кнопок dlg = QDialog(self, Qt.Dialog | Qt.WindowTitleHint | Qt.WindowCloseButtonHint) dlg.setStyleSheet('''background-color:#81848c;''') dlg.resize(dlg.width() * 2.5, dlg.height() * 3.2) """`ProjButton` создание кнопки для преврашения в последующее пустое место, между кнопками в `QDialogButtonBox`""" projbutton = ProjButton('') # `QDialogButtonBox` - кнопки `Reset` и `Cancel` buttonBox = QDialogButtonBox(QDialogButtonBox.Cancel) buttonBox.addButton('Reset', QDialogButtonBox.AcceptRole) buttonBox.addButton(projbutton, QDialogButtonBox.ActionRole) buttonBox.setCursor(Qt.PointingHandCursor) buttonBox.setStyleSheet(''' QPushButton{ background-color:#585b63;font-size:13px; border:1px solid #21242c;padding:0.2em 0; width:60px; } QPushButton::pressed{ background-color:#76798e;color:#ffffff; border-color:#a3a6bb; }''') projbutton.setCursor(Qt.ArrowCursor) projbutton.setStyleSheet(''' background:transparent;border:transparent; width:20px;''') buttonBox.setCenterButtons(True) buttonBox.accepted.connect(self.on_quit) buttonBox.rejected.connect(dlg.close) lbl = QLabel('После сброса, требуется перезапустить программу.') lbl.setAlignment(Qt.AlignCenter) fnt = QFont('Helvetica, Arial, sans-serif', 10) fnt.setBold(True) lbl.setFont(fnt) lbl.setWordWrap(True) vlayout = QVBoxLayout() vlayout.addWidget(lbl) vlayout.addWidget(buttonBox) dlg.setLayout(vlayout) dlg.exec_() def resizeEvent(self, event): # self.evh отступ 50 px от верха окна parheight = event.size().height() parwidth = event.size().width() self.evh = parheight / 13 ymarg = (self.evh / 2) - (self.btnh.height() / 2) xmarg = (self.width() - self.btnh.width()) / 1.01 self.hbox.setGeometry(QRect( xmarg, ymarg, self.btnh.width(), self.btnh.height())) self.boxbuttons.setGeometry(QRect( parwidth / 1.4, parheight / 40, 190, parheight)) # def closeEvent(self, closeEv): # print(qApp.children()) # closeEv.ignore() def paintEvent(self, event): qp = QPainter() qp.begin(self) self.drawLines(qp) qp.end() def drawLines(self, qp): pen = QPen(QColor('#eeeff7'), 2, Qt.SolidLine) qp.setPen(pen) font = QFont('Arial', 19) qp.setFont(font) # first - растояние первой линии от верха first = self.evh qp.drawLine(self.x(), first, self.width(), first) # Отрисовка главного заголовка настроек # Функция возвращающая верхнюю середину ширины окна для подзаголовка def getPosxTitle(name): wn = qp.fontMetrics().width(name) return (self.width() / 2) - (wn / 2) pos_x_title = getPosxTitle(self.listnames[0]) # Условие описания уменьшения названия при уменьшении высоты if self.height() < self.parent().baseSize().height(): fontsize = (first - font.pointSizeF()) / 1.6 if self.height() <= 550: fontsize = 14 font.setPointSizeF(fontsize) qp.setFont(font) pos_x_title = getPosxTitle(self.listnames[0]) qp.drawText(pos_x_title, first / 1.55, self.listnames[0]) # distance = 150 дистанция между остальными линиями distance = (self.height() - first) / 4 i = 0 '''leftIndent - маштабируемый отступ от левой стороны окна, для названий категорий настроек''' leftIndent = qp.viewport().width() / 9 while first < self.height() and i < len(self.listnames[1:]): first += distance i += 1 qp.setPen(QColor('#9fcdd0')) font.setPointSize(16) # ширина квадрата в котором написано название категории # widthrect = 240 widthrect = 240 # размер маленького шрифта smallfnt = 10 if self.height() < self.parent().baseSize().height(): if self.height() <= 550: font.setPointSize(13) widthrect = 220 smallfnt = 8 else: font.setPointSizeF(distance / font.pointSizeF() * 1.72) qp.setFont(font) # posvcen - вычисление маштабируемого отступа по выстое posvcen = lambda a: distance / a + qp.fontMetrics().height() if i == 2: qp.drawText( leftIndent - 5, first - posvcen(1.55), widthrect, distance / 2, Qt.TextWordWrap | Qt.AlignHCenter|Qt.AA_EnableHighDpiScaling, self.listnames[i]) qp.setPen(QColor('#eeeff7')) # font.setPointSize(smallfnt) font.setPointSize(smallfnt) font.setItalic(True) qp.setFont(font) qp.drawText( leftIndent, first - posvcen(2.15), 230, distance / 2, Qt.TextWordWrap | Qt.AlignHCenter|Qt.AA_EnableHighDpiScaling, self.strtolist) else: font.setItalic(False) qp.setFont(font) qp.drawText( leftIndent, first - posvcen(2), widthrect, distance / 2, Qt.TextWordWrap | Qt.AlignHCenter|Qt.AA_EnableHighDpiScaling, self.listnames[i]) # отрисовка линий if first >= self.height(): continue else: qp.setPen(pen) qp.drawLine(self.rect().x(), first, self.width(), first) def on_quit(self): confpath = '{}/accessory/configfile.ini'.format(os.getcwd()) if os.path.exists(confpath): os.remove(confpath) qApp.quit()
def setup_ui(self): # Create the main layout main_layout = QVBoxLayout() self.setLayout(main_layout) # Create a Label to be the title lbl_title = QLabel( "Beaglebone Black - RS485 Serial Interface Controller\nControls Group" ) # Add some StyleSheet to it lbl_title.setStyleSheet("\ QLabel {\ qproperty-alignment: AlignCenter;\ border: 1px solid #FF17365D;\ border-top-left-radius: 15px;\ border-top-right-radius: 15px;\ background-color: #FF17365D;\ padding: 5px 0px;\ color: rgb(255, 255, 255);\ max-height: 40px;\ font-size: 14px;\ }") # Add the title label to the main layout main_layout.addWidget(lbl_title) # Create a GroupBox for subtitles legend_layout = QHBoxLayout() legend_layout.setGeometry(QtCore.QRect(10, 10, 50, 30)) gb_legend = QGroupBox(parent=self) gb_legend.setLayout(legend_layout) # Create a squares and labels brush_black = QBrush(QColor(255, 255, 255)) brush_black.setStyle(QtCore.Qt.SolidPattern) brush_orange = QBrush(QColor(193, 125, 17)) brush_orange.setStyle(QtCore.Qt.SolidPattern) brush_blue = QBrush(QColor(52, 101, 164)) brush_blue.setStyle(QtCore.Qt.SolidPattern) palette = QPalette() palette.setBrush(QPalette.Active, QPalette.Base, brush_black) palette.setBrush(QPalette.Inactive, QPalette.Base, brush_black) font = QFont() font.setItalic(True) self.color_IOC = QLineEdit() self.color_IOC.setEnabled(False) self.color_IOC.setMaximumSize(QtCore.QSize(15, 15)) palette.setBrush(QPalette.Disabled, QPalette.Base, brush_blue) self.color_IOC.setPalette(palette) self.text_IOC = QLabel() self.text_IOC.setText("IOC") self.text_IOC.setFont(font) self.color_PES = QLineEdit() self.color_PES.setEnabled(False) self.color_PES.setMaximumSize(QtCore.QSize(15, 15)) palette.setBrush(QPalette.Disabled, QPalette.Base, brush_orange) self.color_PES.setPalette(palette) self.text_PES = QLabel() self.text_PES.setText("PES") self.text_PES.setFont(font) # Add the created widgets to the layout legend_layout.addWidget(self.color_IOC) legend_layout.addWidget(self.text_IOC) legend_layout.addWidget(self.color_PES) legend_layout.addWidget(self.text_PES) # Add the Groupbox to the main layout main_layout.addWidget(gb_legend) # Create the Search Panel layout search_layout = QHBoxLayout() # Create a GroupBox with "Filtering" as Title gb_search = QGroupBox(parent=self) gb_search.setLayout(search_layout) # Create a label, line edit and button for filtering lbl_search = QLabel(text="Filter: ") self.txt_filter = QLineEdit() self.txt_filter.returnPressed.connect(self.do_search) btn_search = QPushButton() btn_search.setText("Search") btn_search.clicked.connect(self.do_search) # Add the created widgets to the layout search_layout.addWidget(lbl_search) search_layout.addWidget(self.txt_filter) search_layout.addWidget(btn_search) # Add the Groupbox to the main layout main_layout.addWidget(gb_search) # Create the Results Layout self.resultsLT_layout = QVBoxLayout() self.resultsLT_layout.setContentsMargins(0, 0, 0, 0) self.resultsBO_layout = QVBoxLayout() self.resultsBO_layout.setContentsMargins(0, 0, 0, 0) self.resultsSR_layout = QVBoxLayout() self.resultsSR_layout.setContentsMargins(0, 0, 0, 0) self.resultsDCL_layout = QVBoxLayout() self.resultsDCL_layout.setContentsMargins(0, 0, 0, 0) # Create a Frame to host the results of search self.frmLT_result = QFrame(parent=self) self.frmLT_result.setLayout(self.resultsLT_layout) self.frmBO_result = QFrame(parent=self) self.frmBO_result.setLayout(self.resultsBO_layout) self.frmSR_result = QFrame(parent=self) self.frmSR_result.setLayout(self.resultsSR_layout) self.frmDCL_result = QFrame(parent=self) self.frmDCL_result.setLayout(self.resultsDCL_layout) # Create a ScrollArea so we can properly handle many entries scroll_areaLT = QScrollArea(parent=self) scroll_areaBO = QScrollArea(parent=self) scroll_areaSR = QScrollArea(parent=self) scroll_areaDCL = QScrollArea(parent=self) scroll_areaLT.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) scroll_areaBO.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) scroll_areaSR.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) scroll_areaDCL.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) scroll_areaLT.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) scroll_areaBO.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) scroll_areaSR.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) scroll_areaDCL.setHorizontalScrollBarPolicy( QtCore.Qt.ScrollBarAlwaysOff) scroll_areaLT.setWidgetResizable(True) scroll_areaBO.setWidgetResizable(True) scroll_areaSR.setWidgetResizable(True) scroll_areaDCL.setWidgetResizable(True) # Add the Frame to the scroll area scroll_areaLT.setWidget(self.frmLT_result) scroll_areaBO.setWidget(self.frmBO_result) scroll_areaSR.setWidget(self.frmSR_result) scroll_areaDCL.setWidget(self.frmDCL_result) # Create tabs self.tabWidget = QTabWidget(parent=self) self.tabLT = QWidget(self.tabWidget) self.tabWidget.addTab(self.tabLT, "LTs") self.LTLayout = QHBoxLayout(self.tabLT) self.LTLayout.setContentsMargins(0, 0, 0, 0) self.tabsBooster = QWidget(self.tabWidget) self.tabWidget.addTab(self.tabsBooster, "Booster") self.BOLayout = QHBoxLayout(self.tabsBooster) self.BOLayout.setContentsMargins(0, 0, 0, 0) self.tabsAnel = QWidget(self.tabWidget) self.tabWidget.addTab(self.tabsAnel, "Anel") self.SRLayout = QHBoxLayout(self.tabsAnel) self.SRLayout.setContentsMargins(0, 0, 0, 0) self.tabsDCLink = QWidget(self.tabWidget) self.tabWidget.addTab(self.tabsDCLink, "DC-Link") self.DCLLayout = QHBoxLayout(self.tabsDCLink) self.DCLLayout.setContentsMargins(0, 0, 0, 0) # Add the scroll area to the main layout main_layout.addWidget(self.tabWidget) # Add the scroll area to the main layout self.LTLayout.addWidget(scroll_areaLT) self.BOLayout.addWidget(scroll_areaBO) self.SRLayout.addWidget(scroll_areaSR) self.DCLLayout.addWidget(scroll_areaDCL)
class MyWidget(QWidget): def __init__(self): super().__init__() self.my_balance = my_balance self.count = 0 self.inform = -1 self.setGeometry(450, 200, 400, 400) self.topLayout = QHBoxLayout() self.topLayout.setGeometry(QtCore.QRect(5, 5, 390, 50)) self.mainLayout = QVBoxLayout() self.btn = QPushButton(self) self.btn.move(5, 5) self.btn.setText("Доход") self.btn.clicked.connect(self.btn_plus_money) self.btn_2 = QPushButton(self) self.btn_2.move(5, 5) self.btn_2.setText("Расход") self.btn_2.clicked.connect(self.btn_minus_money) self.balance = QLabel(f'Ваш Баланс: {str(self.my_balance)}', self) self.itemsLayout = QVBoxLayout() self.scrollWidget = QWidget() self.scrollWidget.setLayout(self.itemsLayout) self.scrollArea = QScrollArea() self.scrollArea.setWidgetResizable(True) self.scrollArea.setWidget(self.scrollWidget) self.topLayout.addWidget(self.btn) self.topLayout.addWidget(self.btn_2) self.topLayout.addWidget(self.balance) self.mainLayout.addLayout(self.topLayout) self.mainLayout.addWidget(self.scrollArea) self.setLayout(self.mainLayout) def btn_on_click(self): btn = QPushButton(self) btn.setText(str(self.count)) self.count += 1 self.itemsLayout.addWidget(btn) def btn_plus_money(self): corrective = QHBoxLayout() self.btn_added_in_plus = QPushButton(self) self.btn_added_in_plus.setText('Информация') self.showDialogForPlus() corrective.addWidget(self.profit) corrective.addWidget(self.btn_added_in_plus) self.itemsLayout.addLayout(corrective) def showDialogForPlus(self): cash, ok = QInputDialog.getText(self, 'Доход', 'Сколько получили?') if ok: self.profit = QLabel(f'+{str(cash)}', self) self.my_balance += int(cash) self.balance.setText(f'Ваш баланс: {str(self.my_balance)}') def btn_minus_money(self): corrective = QHBoxLayout() self.btn_added_in_minus = QPushButton(self) self.btn_added_in_minus.setText('Информация') self.showDialogForMinus() self.showDialogForInformation() self.btn_added_in_minus.clicked.connect(self.btn_for_information) corrective.addWidget(self.outgo) corrective.addWidget(self.btn_added_in_minus) self.itemsLayout.addLayout(corrective) def showDialogForMinus(self): cash, ok = QInputDialog.getText(self, 'Расход', 'Сколько потратили?') if ok: self.outgo = QLabel(f'-{str(cash)}', self) self.my_balance -= int(cash) self.balance.setText(f'Ваш баланс: {str(self.my_balance)}') def showDialogForInformation(self): information, ok = QInputDialog.getText(self, 'Информация', 'Описание') if ok: self.inform = information def btn_for_information(self, information): QMessageBox.information(self, 'Message', f'{information}')
def __init__(self, statusText, parent=None, **kargs): super(QWidget, self).__init__(parent) self.isClosed = False self.statusText = statusText self.imageDisplay = Image_Display() self.imageDisplay.clientReleaseEvent(self.clientReleaseEvent) self.imageDict = imageDictCreate() self.pixelLevels = (int(0), int(255)) self.npixelLevels = 255 self.minimum = 0 self.low = 0 self.high = self.npixelLevels self.maximum = self.npixelLevels # following are for zoom image self.isZoomImage = False self.xlow = 0 self.ylow = 0 self.numx = 0 self.numy = 0 # first row minimumLabel = QLabel("minimum") minimumLabel.setFixedWidth(100) lowLabel = QLabel("low") lowLabel.setFixedWidth(90) titleLabel = QLabel("pixel intensity") titleLabel.setFixedWidth(110) highLabel = QLabel("high") highLabel.setFixedWidth(100) maximumLabel = QLabel("maximum") maximumLabel.setFixedWidth(80) zoomLabel = QLabel('|| zoom (xlow,ylow,numx.numy)') box = QHBoxLayout() box.setContentsMargins(0, 0, 0, 0) box.addWidget(minimumLabel) box.addWidget(lowLabel) box.addWidget(titleLabel) box.addWidget(highLabel) box.addWidget(maximumLabel) box.addWidget(zoomLabel) wid = QWidget() wid.setLayout(box) self.firstRow = wid #second row self.minimumText = QLineEdit() self.minimumText.setText('') self.minimumText.setEnabled(True) self.minimumText.setFixedWidth(100) self.minimumText.editingFinished.connect(self.minimumEvent) self.lowText = QLabel('') self.lowText.setFixedWidth(100) spaceLabel = QLabel('') spaceLabel.setFixedWidth(100) self.highText = QLabel('') self.highText.setFixedWidth(100) self.maximumText = QLineEdit() self.maximumText.setFixedWidth(80) self.maximumText.editingFinished.connect(self.maximumEvent) self.maximumText.setEnabled(True) self.maximumText.setText('') dividerLabel = QLabel('||') dividerLabel.setFixedWidth(20) self.resetButton = QPushButton('reset') self.resetButton.setFixedWidth(40) self.resetButton.setEnabled(True) self.resetButton.clicked.connect(self.resetEvent) self.zoomText = QLineEdit() self.zoomText.setEnabled(True) self.zoomText.setFixedWidth(180) self.zoomText.editingFinished.connect(self.zoomTextEvent) box = QHBoxLayout() box.setContentsMargins(0, 0, 0, 0) box.addWidget(self.minimumText) box.addWidget(self.lowText) box.addWidget(spaceLabel) box.addWidget(self.highText) box.addWidget(self.maximumText) box.addWidget(dividerLabel) box.addWidget(self.resetButton) box.addWidget(self.zoomText) wid = QWidget() wid.setLayout(box) self.secondRow = wid #third row self.lowSlider = QSlider(Qt.Horizontal) self.lowSlider.setContentsMargins(0, 0, 0, 0) self.lowSlider.setMinimum(0) self.lowSlider.setMaximum(self.npixelLevels) self.lowSlider.setValue(0) self.lowSlider.setTickPosition(QSlider.TicksBelow) self.lowSlider.setTickInterval(10) self.lowSlider.setFixedWidth(256) self.highSlider = QSlider(Qt.Horizontal) self.highSlider.setContentsMargins(0, 0, 0, 0) self.highSlider.setMinimum(0) self.highSlider.setMaximum(self.npixelLevels) self.highSlider.setValue(self.npixelLevels) self.highSlider.setTickPosition(QSlider.TicksBelow) self.highSlider.setTickInterval(10) self.highSlider.setFixedWidth(256) box = QHBoxLayout() box.addStretch(0) box.setSpacing(0) box.setContentsMargins(0, 0, 0, 0) box.setGeometry(QRect(0, 0, 500, 20)) box.addWidget(self.lowSlider) box.addWidget(self.highSlider) wid = QWidget() wid.setLayout(box) self.thirdRow = wid #create window layout = QGridLayout() layout.setSpacing(0) layout.addWidget(self.firstRow, 0, 0, alignment=Qt.AlignLeft) layout.addWidget(self.secondRow, 1, 0, alignment=Qt.AlignLeft) layout.addWidget(self.thirdRow, 2, 0, alignment=Qt.AlignLeft) self.setLayout(layout) self.lowSlider.valueChanged.connect(self.lowSliderValueChange) self.highSlider.valueChanged.connect(self.highSliderValueChange) self.show()
def initUI(self): self.setWindowIcon(QtGui.QIcon('Iconka.bmp')) self.statusBar() font_status = QtGui.QFont() font_status.setFamily('Consolas') font_status.setPointSize(18) self.statusBar().setFont(font_status) self.setGeometry(150, 150, 1600, 700) self.setWindowTitle('ImageToGcode') self.setMinimumSize(QtCore.QSize(1600, 700)) self.setMaximumSize(QtCore.QSize(1920, 1080)) # Кнопка загрузки изображения self.zagruzka = Butt('Завантаження', self) self.zagruzka.setFixedSize(200, 30) # self.zagruzka.setGeometry(QtCore.QRect(30, 30, 150, 50)) # Кнопка просмотра редактированного изображения self.pixelization = Butt('Пікселізація', self) self.pixelization.setFixedSize(200, 30) # self.pixelization.setGeometry(QtCore.QRect(520, 65, 200, 50)) # Кнопка рассчета программы self.calculate_path = Butt('Розрахувати траєкторію', self) self.calculate_path.setFixedSize(300, 30) self.calculate_path.setDisabled(True) # Кнопка сохранения Gcode self.save_doc = Butt('Зберегти файл', self) self.save_doc.setFixedSize(250, 50) # self.save_doc.setGeometry(QtCore.QRect(1150, 620, 250, 50)) self.save_doc.setDisabled(True) # Информация про размер изображения self.info_picture = Nadpis('Розмір зображення: ', self) self.info_picture.setFixedSize(550, 30) # self.info_picture.setGeometry(QtCore.QRect(190, 30, 550, 30)) self.info_picture.setFrameStyle(1) # Информация о параметрах редактирования изображения self.scale = Nadpis('Кратність: ', self) self.scale.setFixedSize(200, 30) # self.scale.setGeometry(QtCore.QRect(210, 60, 190, 30)) self.size_pixel = Nadpis('Розмір пікселя: ', self) self.size_pixel.setFixedSize(200, 30) # self.size_pixel.setGeometry(QtCore.QRect(210, 90, 190, 30)) # Вывод размера пикселя self.size_pixel_out = Nadpis(self) self.size_pixel_out.setFixedSize(110, 30) # self.size_pixel_out.setGeometry(QtCore.QRect(400, 90, 110, 30)) self.size_pixel_out.setFrameStyle(1) self.size_pixel_out.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignBaseline) # Елементы для просмотра загруженного и обработанного изображений self.origin_image = Nadpis(self) self.origin_image.setGeometry(QtCore.QRect(60, 150, 500, 500)) self.origin_image.setFrameStyle(1) self.edited_image = Nadpis(self) self.edited_image.setGeometry(QtCore.QRect(580, 150, 500, 500)) self.edited_image.setFrameStyle(1) # Інформація про готову траєкторію self.path_info = Nadpis(path_info_text(), self) self.path_info.setFixedSize(450, 90) # self.path_info.setAlignment(QtCore.Qt.AlignVCenter | # QtCore.Qt.AlignBaseline) # self.path_info.setGeometry(QtCore.QRect(190, 30, 550, 30)) self.path_info.setFrameStyle(1) self.path_info.setVisible(True) # Поля ввода для параметров редактирования изображения self.scale_input = L_Edit_int(self) self.scale_input.setGeometry(QtCore.QRect(400, 60, 110, 30)) # Надписи названий полей self.rozmir = Nadpis(12 * ' ' + 'Розмір зони обробки', self) self.Width_size = Nadpis('Ширина', self) self.Height_size = Nadpis('Висота', self) self.blank = Nadpis('', self) self.feed_z_n = Nadpis('Вертикальна подача', self) self.z_safe_n = Nadpis('Висота безпеки', self) self.depth_Z_n = Nadpis('Максимальна глибина', self) self.filtr_z_n = Nadpis('Мінімальний поріг глибини', self) self.rapid_feed = Nadpis('Швидкість холостого ходу', self) # Надписи одиниць вимірювання self.unit1 = Nadpis('мм', self) self.unit2 = Nadpis('мм', self) self.unit3 = Nadpis('мм/хв', self) self.unit4 = Nadpis('мм', self) self.unit5 = Nadpis('мм', self) self.unit6 = Nadpis('мм', self) self.unit7 = Nadpis('мм/хв', self) self.rozmir.setFixedSize(250, 30) self.blank.setFixedSize(150, 30) # Поля вводу для параметрів для створення управляючої програми self.Width_size_input = L_Edit(self) self.Height_size_input = L_Edit(self) self.feed_z_input = L_Edit(self) self.z_safe_input = L_Edit(self) self.depth_Z_input = L_Edit(self) self.filtr_z_input = L_Edit(self) self.rapid_feed_input = L_Edit(self) # Сітка із елементів інтерфейсу zagruz_pix = QGridLayout() self.setLayout(zagruz_pix) zagruz_pix.setSpacing(10) zagruz_pix.addWidget(self.zagruzka, 0, 0) zagruz_pix.addWidget(self.pixelization, 1, 0) zagruz_pix.addWidget(self.info_picture, 0, 1, 1, 3) zagruz_pix.addWidget(self.scale, 1, 1) zagruz_pix.addWidget(self.size_pixel, 2, 1) zagruz_pix.addWidget(self.scale_input, 1, 2) zagruz_pix.addWidget(self.size_pixel_out, 2, 2) # Розміри сітки елементів zagruz_pix.setGeometry(QtCore.QRect(30, 30, 1200, 90)) # Група елеметів для показу зображень visualisation_elements = QHBoxLayout() self.setLayout(visualisation_elements) visualisation_elements.setSpacing(30) visualisation_elements.addWidget(self.origin_image) visualisation_elements.addWidget(self.edited_image) visualisation_elements.setGeometry(QtCore.QRect(50, 160, 1050, 500)) # Сетка из елементов для параметров станка cnc_params = QGridLayout() self.setLayout(cnc_params) cnc_params.setSpacing(10) cnc_params.addWidget(self.rozmir, 1, 0, 1, 2) cnc_params.addWidget(self.Width_size, 2, 0) cnc_params.addWidget(self.Width_size_input, 2, 1) cnc_params.addWidget(self.unit2, 2, 2) cnc_params.addWidget(self.Height_size, 3, 0) cnc_params.addWidget(self.Height_size_input, 3, 1) cnc_params.addWidget(self.unit1, 3, 2) cnc_params.addWidget(self.blank, 4, 0) cnc_params.addWidget(self.feed_z_n, 5, 0) cnc_params.addWidget(self.feed_z_input, 5, 1) cnc_params.addWidget(self.unit3, 5, 2) cnc_params.addWidget(self.z_safe_n, 6, 0) cnc_params.addWidget(self.z_safe_input, 6, 1) cnc_params.addWidget(self.unit4, 6, 2) cnc_params.addWidget(self.depth_Z_n, 7, 0) cnc_params.addWidget( self.depth_Z_input, 7, 1, ) cnc_params.addWidget(self.unit5, 7, 2) cnc_params.addWidget(self.filtr_z_n, 8, 0) cnc_params.addWidget( self.filtr_z_input, 8, 1, ) cnc_params.addWidget(self.unit6, 8, 2) cnc_params.addWidget(self.rapid_feed, 9, 0) cnc_params.addWidget(self.rapid_feed_input, 9, 1) cnc_params.addWidget(self.unit7, 9, 2) cnc_params.addWidget(self.calculate_path, 10, 0) cnc_params.addWidget(self.path_info, 11, 0, 1, 3) cnc_params.addWidget(self.save_doc, 13, 0) # Розміри сітки елементів cnc_params.setGeometry(QtCore.QRect(1110, 80, 520, 580)) # Диалоговое окно вибора файла. self.openFile = QAction(QIcon('open.png'), 'Відкрити файл... ', self) self.openFile.setShortcut('Ctrl+O') self.openFile.setStatusTip('Відкрити новий файл') # openFile.triggered.connect(self.showDialog) self.menubar = self.menuBar() self.fileMenu = self.menubar.addMenu('&Файл') self.fileMenu.addAction(self.openFile) self.fileMenu = self.menubar.addMenu('&Інфо') self.show()
class View(QWidget): send_data = pyqtSignal(object) baudrate_src_changed = pyqtSignal(object) baudrate_pump_changed = pyqtSignal(object) baudrate_temp_changed = pyqtSignal(object) #eol_changed = pyqtSignal(object) port_changed = pyqtSignal(object) seedPulseChanged = pyqtSignal(object) seedFreValueChanged = pyqtSignal(object) seedPulseFreChanged = pyqtSignal(object) firstPumpChanged = pyqtSignal(object) secondPumpChanged = pyqtSignal(object) startSrcModel = pyqtSignal(object) startPumpModel = pyqtSignal(object) startTempModel = pyqtSignal(object) beginTime = pyqtSignal(object) emitUsername = pyqtSignal(object) def __init__(self): super(QWidget,self).__init__() QWidget.__init__(self) self.queue = Queue() self.end_cmd = None self.autoscroll = True self.msg_sent = False self.timer = QTimer() self.timer.timeout.connect(self.update_gui) self.timer.start(100) self.srcModelstarted = False self.pumpModelstarted = False self.tempModelstarted = False self.currentValueList =list() self.currentTimeList = list() self.buttonMinimumWidth = 100 # self.topSeedCurrent = 700 # self.topPumpCurrent = 1000 self.canClosePort = True self.initSeedPulse = 0 self.initSeedFre = 0 self.init1stCurrent = 0 self.init2stCurrent = 0 self.initSeedCurrent =0 # get the lastsave record self.last = LastLog() self.lastpick = self.last.loadLast() uslast = self.lastpick.get('user',False) print('uslast',uslast) if uslast is False: self.user = User() else: self.user = uslast #init down machine status self.__init__slaveStatus() self.__initUI() def __init__slaveStatus(self): self.isSeedOpen = False self.seedcurrentre = False self.seedpulsere = False self.seedfrequecere = False self.seedcurrent = 0 self.seedpulse = 0 self.seedfrequece = 0 self.firstcurrent = 0 self.secondcurrent = 0 self.isFirstPumpOpen = False self.isSecondPumpOpen = False self.isLEDOpen = False def __initUI(self): '''main window box''' self.mainBox = QVBoxLayout(self)#使用垂直布局类 self.showBox = QHBoxLayout() self.setWindowState(Qt.WindowMaximized) ### #command area: push button, plain text edit and line edit ### cmd_btn = QPushButton('Send Command (ctrl+Q)') cmd_btn.setMinimumWidth(self.buttonMinimumWidth) cmd_btn.clicked.connect(self.emit_send_data) #import cmd strl+enter cmdEnterAction = QAction(self) cmdEnterAction.setShortcut('ctrl+Q') cmdEnterAction.setStatusTip(' press ctrl+Q to send command') cmdEnterAction.triggered.connect(self.emit_send_data) self.cmd_edit = QLineEdit() self.cmd_edit.addAction(cmdEnterAction) cmdBox = QVBoxLayout() #message box self.editer = QPlainTextEdit() self.editer.setReadOnly(True) # <<<<<<< HEAD self.editer.setMaximumSize(300,2000) # ======= cmdBox = QVBoxLayout() # cmdBox.addWidget(self.cmd_edit) # cmdBox.addWidget(cmd_btn) self.powerShow = PowerShow() cmdBox.addWidget(self.powerShow) # >>>>>>> a45e80ec77a4a8729fa4205165faae001fd09cab cmdBox.addWidget(self.editer) # cmd_btn.setMaximumSize(300,400) # self.cmd_edit.setMaximumSize(300,100) ### #paint area use matplotlib ### self.paintwidget = QWidget(self) self.painter = MyDynamicMplCanvas(self.paintwidget, width=5, height=4, dpi=100) # self.showBox.addLayout(self.powerShowUI()) self.showBox.addLayout(cmdBox) self.showBox.addWidget(self.painter) self.toolBoxUI() self.mainBox.addWidget(self.toolBox) self.mainBox.addLayout(self.showBox) self.setLayout(self.mainBox) self.setWindowTitle("光子暗化平台软件") def toolBoxUI(self): '''use a tab widget to organize set area ''' ### #QTabWidget() layout ### gbox1 = QGroupBox() gbox1.setStyleSheet("QGroupBox{border:None;}") self.useBox = QHBoxLayout(gbox1) self.useBox.setGeometry(QRect( 0, 0, 300,100)) gbox2 = QGroupBox() gbox2.setStyleSheet("QGroupBox{border:None;}") self.portUI = PortGBUI() self.portUI.setupUi(gbox2) # self.portUI.widget.setGeometry(QRect( 0, 0, 450,200)) gbox3 = QGroupBox() gbox3.setStyleSheet("QGroupBox{border:None;}") self.pumpUI = PumpUI() self.pumpUI.setupUi(gbox3) self.pumpUI.groupBox.setTitle(' ') # self.pumpUI.widget.setGeometry(QRect( 0, 0, 400,200)) gbox4 = QGroupBox() gbox4.setStyleSheet("QGroupBox{border:None;}") gbox5 = QGroupBox() gbox5.setStyleSheet("QGroupBox{border:None;}") #self.menuBox = QHBoxLayout() # self.setBox = QHBoxLayout(gbox2) self.pumpBox = QGridLayout(gbox3) self.powerRecordBox = QHBoxLayout(gbox4) self.toolBox = QTabWidget() # self.toolBox.setStyleSheet("QTabWidget.pane{background: transparent;}\ # ") self.toolBox.addTab(gbox1,'用户登录') self.toolBox.addTab(gbox2,'串口设置') self.toolBox.addTab(gbox3,'泵浦开关') self.toolBox.addTab(gbox4,'功率计') self.toolBox.addTab(gbox5,'帮助') # self.toolBox. self.toolBox.setTabEnabled(1,False) self.toolBox.setTabEnabled(2,False) self.toolBox.setTabEnabled(3,False) self.toolBox.setMaximumSize(10000,200) # self.toolBox.resize(1200,200) userbox = UserView() userbox.usersignal.connect(self.setUser) self.useBox.addWidget(userbox) # self.useBox.addStretch() self.powerRecord = PowerRecord() self.powerRecord.getNowFig(self.painter) self.powerRecord.timeStateSignal.connect(self.painter.getLogTimeState) self.powerRecord.logStateSignal.connect(self.painter.getStartLog) self.powerRecord.plotlist.connect(self.painter.XYaxitList) self.powerRecordBox.addWidget(self.powerRecord) # #port set # menuItem = ['300 baud','1200 baud', '2400 baud','4800 baud','9600 baud', '19200 baud','38400 baud','57600 baud', '115200 baud','230400 baud','250000 baud'] self.portUI.baundrateSource.addItems(menuItem) self.portUI.baundratePump.addItems(menuItem) # self.portUI.baundrateTemp.addItems(menuItem) #source port set #source portItem = ['com1','com2','com3','com4', 'com5','com6','com7','com8','com9', 'com10','com11','com12','com13', 'com14','com15','com16','com17', 'com18','com19','com20'] self.portUI.portSource.addItems(portItem) self.portUI.portPump.addItems(portItem) self.setPortButton = self.portUI.openportSource self.closePortButton = self.portUI.closeportSource self.baundrateMenu = self.portUI.baundrateSource self.portEdit = self.portUI.portSource self.baundrateMenu.currentIndexChanged.connect(self.emit_br_src_changed) baudindex = self.lastpick.get('srcBaud',False) if baudindex is not False : self.baundrateMenu.setCurrentIndex(baudindex) else: self.baundrateMenu.setCurrentIndex(4) portindex = self.lastpick.get('srcPort',False) if baudindex is not False : self.portEdit.setCurrentIndex(portindex) else: self.portEdit.setCurrentIndex(1) baudindex = self.lastpick.get('pumpBaud',False) if baudindex is not False : self.portUI.baundratePump.setCurrentIndex(baudindex) else: self.portUI.baundratePump.setCurrentIndex(4) portindex = self.lastpick.get('pumpPort',False) if baudindex is not False : self.portUI.portPump.setCurrentIndex(portindex) else: self.portUI.portPump.setCurrentIndex(2) ### #pump set ### self.openSeedButton = self.pumpUI.sourceSet self.setSeedPulse = self.pumpUI.pulseSpin self.openSeedButton.clicked.connect(self.emitSeedPulseAndFre) self.setSeedPulse.setValue(self.initSeedPulse) self.setSeedFreValue = self.pumpUI.frequencySpin self.setSeedCurrent = self.pumpUI.currentSpin self.setSeedCurrent.setValue(self.initSeedCurrent) self.openAll = self.pumpUI.sourceOpen self.sendfirst = self.pumpUI.firstPumpSet self.sendfirst.clicked.connect(self.emitFirstPumpCurrent) self.sendsecond = self.pumpUI.secondPumpSet self.sendsecond.clicked.connect(self.emitSecondPumpCurrent) self.setFirstpump = self.pumpUI.firstpumpSpin self.setFirstpump.setValue(self.init1stCurrent) self.setSecondpump = self.pumpUI.secondpumpSpin self.setSecondpump.setValue(self.init2stCurrent) self.closeAll = self.pumpUI.sourceClose self.pumpUI.firstpumpSpin.setMaximum(1000) self.pumpUI.secondpumpSpin.setMaximum(10000) self.pumpUI.secondpumpSpin.setSingleStep(500) def enableClosePort(self): if self.setSeedPulse.text()[:-2] > self.initSeedPulse : self.canClosePort = False print(self.canClosePort) if self.setSeedFreValue.texttext()[:-3] > self.initSeedFre : self.canClosePort = False print(self.canClosePort) if self.setSeedCurrent.text()[:-2] > self.initSeedCurrent: self.canClosePort = False print(self.canClosePort) if self.setFirstpump.text()[:-2] > self.init1stCurrent : self.canClosePort = False print(self.canClosePort) if self.setSecondpump.text()[:-2] > self.init2stCurrent : self.canClosePort = False print(self.canClosePort) def seedSignalSet(self, seedcurrent, seedpulse, seedfrequece): self.seedcurrent = seedcurrent self.setSeedCurrent.setValue(self.seedcurrent) self.seedpulse = seedpulse self.setSeedPulse.setValue(self.seedpulse) self.seedfrequece = seedfrequece self.setSeedFreValue.setValue(self.seedfrequece) def firstCurrentSet(self,value): self.firstcurrent = value self.setFirstpump.setValue(self.firstcurrent) def secondCurrentSet(self,value): self.secondcurrent = value self.setSecondpump.setValue(self.secondcurrent) #============================================================================== # Get, set #============================================================================== def setPowerShowList(self,lst): self.powerShow.powerList = lst self.powerShow.updateFigure() def set_queue(self, queue): self.queue = queue def set_end_cmd(self, end_cmd): self.end_cmd = end_cmd # def set_autoscroll(self, value): # self.autoscroll = value def set_port(self, value): self.portEdit.clear() self.portEdit.insert(value) def getSrcPort(self): self.lastpick['srcPort'] = self.portEdit.currentIndex() return self.portEdit.currentText() def getSrcBaudrate(self): self.lastpick['srcBaud'] = self.baundrateMenu.currentIndex() return self.baundrateMenu.currentText()[:-5] def getPumpPort(self): self.lastpick['pumpPort'] = self.portUI.portPump.currentIndex() return self.portUI.portPump.currentText() def getPumpBaudrate(self): self.lastpick['pumpBaud'] = self.portUI.baundratePump.currentIndex() return self.portUI.baundratePump.currentText()[:-5] def get_cmd(self): return self.cmd_edit.text() def setCurrentValue(self, currentValue,timeValue): if currentValue is not None: self.currentValueList = currentValue self.currentTimeList = timeValue def Button2Plot(self): self.painter.update_figure() def closeEvent(self, event): self.last.saveLast(self.lastpick) self.end_cmd() QWidget.closeEvent(self, event) print('exit') def beginGui(self): self.update() def update_gui(self): self.process_incoming() self.update() def updataFigure(self,newtime,power): # self.setCurrentValue(currentValue, timeValue) self.painter.XYaxit(newtime,power) self.painter.update_figure() # print('update?') # self.update() def process_incoming(self): while self.queue.qsize(): try: msg = self.queue.get(0) self.editer.appendPlainText(str(msg)) #show to the textplain? #if self.autoscroll: self.editer.ensureCursorVisible() self.scroll_down() except Queue.empty: print('=== empty queue ===') def scroll_down(self): sb = self.editer.verticalScrollBar() sb.setValue(sb.maximum()) def changePort(self): if not self.msg_sent: self.msg_sent = True self.emit_port_changed() else: self.msg_sent = False return None #============================================================================== # Signals #============================================================================== def emit_send_data(self): self.send_data.emit(self.get_cmd()) self.cmd_edit.clear() def emit_send_command(self,command): self.send_data.emit(command) self.cmd_edit.clear() def emit_br_src_changed(self, value): baudrate = self.baundrateMenu.itemText(value)[:-5] self.baudrate_src_changed.emit(baudrate) def emit_br_pump_changed(self, value): baudrate = self.baundrateMenu.itemText(value)[:-5] self.baudrate_pump_changed.emit(baudrate) # def emit_br_temp_changed(self, value): # baudrate = self.baundrateMenu.itemText(value)[:-5] # self.baudrate_temp_changed.emit(baudrate) def emit_port_changed(self): self.port_changed.emit(self.portEdit.text()) self.portEdit.clear() def emitWriteSeedPulse(self): self.seedPulseChanged.emit(self.setSeedPulse.text()[:-2]) def emitWriteSeedFre(self): self.seedFreValueChanged.emit(self.setSeedFreValue.text()[:-3]) def emitFirstPumpCurrent(self): self.firstPumpChanged.emit(self.setFirstpump.text()[:-2]) def emitSecondPumpCurrent(self): self.secondPumpChanged.emit(self.setSecondpump.text()[:-2]) def emitSeedPulseAndFre(self): seedPulseAndFre = [self.setSeedPulse.text()[:-2], self.setSeedFreValue.text()[:-3],self.setSeedCurrent.text()[:-2]] # print(self.setSeedPulse.text()[:-2], # self.setSeedFreValue.text()[:-2],self.setSeedCurrent.text()[:-2]) self.seedPulseFreChanged.emit(seedPulseAndFre) def setUser(self,value): self.user = value if value.getName() is not False: self.toolBox.setTabEnabled(1,True) self.toolBox.setTabEnabled(2,True) self.toolBox.setTabEnabled(3,True) self.powerRecord.setUserID(self.user.getName()) self.startSrcModel.emit(self.srcModelstarted) self.srcModelstarted = True self.startPumpModel.emit(self.pumpModelstarted) self.pumpModelstarted = True # self.startTempModel.emit(self.tempModelstarted) # self.tempModelstarted = True self.emitUsername.emit(self.user.getName()) print('emit username:'******'NoneUser') print('use in view:',self.user.getName()) def lastLogSave(self): self.last.saveLast(self.lastpick)
def init_toolbar_attribute(self): self.toolbar_group_box.setStyleSheet("color: white;" "font-size: 20px;") toolbar_h_box_layout = QHBoxLayout() toolbar_h_box_layout.setGeometry(QRect(0, 0, 0, 0)) toolbar_h_box_layout.setAlignment(QtCore.Qt.AlignLeft) prev_button = QPushButton() home_button = QPushButton() report_button = QPushButton() setting_button = QPushButton() alternate_button = QPushButton() setting_button.setIcon(QIcon("assets/setting.png")) setting_button.setStyleSheet(""" QPushButton { background-color: #5b5c5e; padding: 2px; min-height: 45px; min-width: 45px; border-radius: 10px; border-bottom: 1.5px solid black; border-right: 1px solid black; } QPushButton:hover:!pressed { background-color: #4d4d4d; } QPushButton:pressed { background-color: #5b5c5e; border: 1px solid black; } """) setting_button.setIconSize(QSize(40, 40)) prev_button.setIcon(QIcon("assets/prev.png")) prev_button.setStyleSheet(""" QPushButton { background-color: #5b5c5e; padding: 2px; min-height: 45px; min-width: 45px; border-radius: 10px; border-bottom: 1.5px solid black; border-right: 1px solid black; } QPushButton:hover:!pressed { background-color: #4d4d4d; } QPushButton:pressed { background-color: #5b5c5e; border: 1px solid black; } """) prev_button.setIconSize(QSize(40, 40)) home_button.setIcon(QIcon("assets/home.png")) home_button.setStyleSheet(""" QPushButton { background-color: #5b5c5e; padding: 2px; min-height: 45px; min-width: 45px; border-radius: 10px; border-bottom: 1.5px solid black; border-right: 1px solid black; } QPushButton:hover:!pressed { background-color: #4d4d4d; } QPushButton:pressed { background-color: #5b5c5e; border: 1px solid black; } """) home_button.setIconSize(QSize(40, 40)) report_button.setIcon(QIcon("assets/report.png")) report_button.setStyleSheet(""" QPushButton { background-color: #5b5c5e; padding: 2px; min-height: 45px; min-width: 45px; border-radius: 10px; border-bottom: 1.5px solid black; border-right: 1px solid black; } QPushButton:hover:!pressed { background-color: #4d4d4d; } QPushButton:pressed { background-color: #5b5c5e; border: 1px solid black; } """) alternate_button.setIcon(QIcon("assets/alternate.png")) alternate_button.setStyleSheet(""" QPushButton { background-color: #5b5c5e; padding: 2px; min-height: 45px; min-width: 45px; border-radius: 10px; border-bottom: 1.5px solid black; border-right: 1px solid black; } QPushButton:hover:!pressed { background-color: #4d4d4d; } QPushButton:pressed { background-color: #5b5c5e; border: 1px solid black; } """) report_button.setIconSize(QSize(40, 40)) alternate_button.setIconSize(QSize(40, 40)) report_button.clicked.connect(self.open_history_report) setting_button.clicked.connect(self.open_preferences) alternate_button.clicked.connect(self.open_alternate) # toolbar_h_box_layout.addWidget(prev_button) toolbar_h_box_layout.addWidget(home_button) toolbar_h_box_layout.addWidget(report_button) toolbar_h_box_layout.addWidget(alternate_button) toolbar_h_box_layout.addWidget(setting_button) self.toolbar_group_box.setLayout(toolbar_h_box_layout)
class MyWidget(QWidget): def __init__(self): super().__init__() self.my_balance = 0 self.database = ['zero'] self.setGeometry(450, 200, 400, 400) self.setWindowIcon(QIcon('icon.png')) self.topLayout = QHBoxLayout() self.topLayout.setGeometry(QtCore.QRect(5, 5, 390, 50)) self.mainLayout = QVBoxLayout() self.btn = QPushButton(self) self.btn.setText("Доход") self.btn.clicked.connect(self.btn_plus_money) self.btn_2 = QPushButton(self) self.btn_2.setText("Расход") self.btn_2.clicked.connect(self.btn_minus_money) self.clear_button = QPushButton(self) self.clear_button.setText('Очистить') self.clear_button.clicked.connect(self.clear_button_clicked) self.itemsLayout = QVBoxLayout() self.itemsLayout.addWidget(lining()) with open('database.txt', 'r') as file: file = open('database.txt', 'r') if file.read(): file.close() with open('database.txt', 'r') as f: self.database = f.readline().split('#') for widget in self.database[1:]: widget = widget.split() corrective = QHBoxLayout() corrective.addWidget(QLabel(widget[0])) corrective.addWidget(QLabel(widget[-1])) self.itemsLayout.addLayout(corrective) self.itemsLayout.addWidget(lining()) self.my_balance = int(self.database[0]) self.scrollWidget = QWidget() self.scrollWidget.setLayout(self.itemsLayout) self.scrollArea = QScrollArea() self.scrollArea.setWidgetResizable(True) self.scrollArea.setWidget(self.scrollWidget) self.balance = QLabel(f'Ваш Баланс: {str(self.my_balance)}', self) self.topLayout.addWidget(self.clear_button) self.topLayout.addWidget(self.btn) self.topLayout.addWidget(self.btn_2) self.topLayout.addWidget(self.balance) self.mainLayout.addLayout(self.topLayout) self.mainLayout.addWidget(self.scrollArea) self.setLayout(self.mainLayout) def clear_button_clicked(self): QMessageBox.about(self, 'Информация', 'Перезапустите приложение') f = open('database.txt', 'w') f.write('') f.close() def btn_plus_money(self): corrective = QHBoxLayout() self.show_dialog_for_plus() date = QLabel(dating(), self) corrective.addWidget(date) corrective.addWidget(self.profit) self.itemsLayout.addLayout(corrective) self.itemsLayout.addWidget(lining()) def show_dialog_for_plus(self): cash, ok = QInputDialog.getText(self, 'Доход', 'Сколько получили?') if ok: print(self.database) self.profit = QLabel(f'+{str(cash)}', self) self.my_balance += int(cash) self.balance.setText(f'Ваш баланс: {str(self.my_balance)}') self.database[0] = str(self.my_balance) self.database.append(' '.join([dating(), f'+{cash}'])) f = open('database.txt', 'w') f.write('#'.join(self.database)) f.close() def btn_minus_money(self): corrective = QHBoxLayout() self.show_dialog_for_minus() date = QLabel(dating(), self) corrective.addWidget(date) corrective.addWidget(self.outgo) self.itemsLayout.addLayout(corrective) self.itemsLayout.addWidget(lining()) def show_dialog_for_minus(self): cash, ok = QInputDialog.getText(self, 'Расход', 'Сколько потратили?') if ok: self.outgo = QLabel(f'-{str(cash)}', self) self.my_balance -= int(cash) self.balance.setText(f'Ваш баланс: {str(self.my_balance)}') self.database[0] = str(self.my_balance) self.database.append(' '.join([dating(), f'-{cash}'])) f = open('database.txt', 'w') f.write('#'.join(self.database)) f.close()