Ejemplo n.º 1
0
    def init_win_title(self):
        self.min = QPushButton()
        self.shutdown = QPushButton()
        self.title = QLabel('Synferlo Scrapping v1.0')

        title_font = QFont()
        title_font.bold()
        title_font.setFamily('Consolas')
        title_font.setPointSize(12)

        self.title.setFont(title_font)
        self.title.setAlignment(Qt.AlignCenter)

        self.min.setFixedSize(15, 15)
        self.shutdown.setFixedSize(15, 15)

        self.min.setStyleSheet(
            """QPushButton{background:#6DDF6D;border-radius:5px;}QPushButton:hover{background:green;}"""
        )
        self.shutdown.setStyleSheet(
            """QPushButton{background:#F76677;border-radius:5px;}QPushButton:hover{background:red;}"""
        )

        # minimize the window
        self.min.clicked['bool'].connect(self.showMinimized)
        self.shutdown.clicked['bool'].connect(self.close)

        self.win_title_layout.addWidget(self.title, 0, 0, 1, 8)
        self.win_title_layout.addWidget(self.min, 0, 8, 1, 1)
        self.win_title_layout.addWidget(self.shutdown, 0, 9, 1, 1)
Ejemplo n.º 2
0
    def __init__(self):
        super().__init__()
        self.title = 'Donkey Kong'

        self.setStyleSheet("QWidget { background-color: %s}" %
                           QColor(0, 0, 0).name())
        self.resize(800, 600)
        self.center()

        pybutton1 = QPushButton('New Game', self)
        pybutton1.clicked.connect(self.clickMethod1)
        pybutton1.resize(180, 50)
        pybutton1.move(310, 400)

        font = QFont()
        font.setFamily("Arcade Normal")
        font.setPointSize(15)
        font.bold()

        pybutton1.setStyleSheet(
            "QPushButton:!hover { background-color: black; color: white; }"
            "QPushButton:hover { background-color: black; color: red; }")
        pybutton1.setFont(font)

        pybutton2 = QPushButton('Controls', self)
        pybutton2.clicked.connect(self.clickMethod2)
        pybutton2.resize(160, 50)
        pybutton2.move(320, 500)

        pybutton2.setStyleSheet(
            "QPushButton:!hover { background-color: black; color: white; }"
            "QPushButton:hover { background-color: black; color: red; }")
        pybutton2.setFont(font)

        self.initUI()
Ejemplo n.º 3
0
 def render__label_qfont(self, qfont: QFont):
     self.cfg.render.label_font = attr.evolve(
         self.cfg.render.label_font,
         # Font file selection
         family=qfont.family(),
         bold=qfont.bold(),
         italic=qfont.italic(),
         # Font size
         size=qfont.pointSizeF(),
         # QFont implementation details
         toString=qfont.toString(),
     )
    def _setupFormat(self,
                     color: QColor,
                     fontSettings: QFont,
                     colorIsForeground: bool = True) -> QTextCharFormat:
        pattern_format = QTextCharFormat()
        if color and colorIsForeground:
            pattern_format.setForeground(color)
        if color and (not colorIsForeground):
            pattern_format.setBackground(color)
        pattern_format.setFontItalic(fontSettings.italic())
        pattern_format.setFontWeight(fontSettings.bold())

        return pattern_format
Ejemplo n.º 5
0
class NFontConverterWidget(QWidget):

    data_ready_signal = pyqtSignal(NGL_Font)

    def __init__(self, name, dataSlot=None, parent=None):
        """ Constructor """
        super(NFontConverterWidget, self).__init__(parent)

        self.settings = QSettings('NeilLab', 'NGL Font')

        # load main ui window
        uifile = pkg_resources.resource_filename('ngl_utils.nfont',
                                                 'qtres/ngl_font.ui')
        self.uic = uic.loadUi(uifile, self)

        self.nfont_view = CodeView_Window(self)
        self.sysFont_dialog = QFontDialog(self)

        # def sysfont and font name
        self.font = QFont('Times', 8)
        self.NGL_Font = None
        fname = NGL_Font.formatName(self.font.family(), self.font.pointSize(),
                                    self.font.bold())
        self.lineEdit_fontName.setText(fname)

        # generates chars set for combobox
        self._charstersRangesInit()

        # font edit widget
        self.edit_view = NFontEditWidget('__util__')

        # connect signals / slots
        self.tBtn_Font.clicked.connect(self._selectFont_slot)
        self.tBtn_AddChars.clicked.connect(self._add_chars_slot)
        self.tBtn_Convert.clicked.connect(self._convert_slot)
        self.tBtn_Save.clicked.connect(self._saveAs_slot)
        self.tBtn_ViewOut.clicked.connect(self._view_out_slot)
        self.tBtn_Edit.clicked.connect(self._edit_font_slot)

        if name == '__main__':
            self.tBtn_Close.setText('Close')
            self.tBtn_Close.clicked.connect(self._close_slot)
        else:
            self.tBtn_Close.setText('Add')
            self.tBtn_Close.clicked.connect(self._ok_slot)
        self.connectDataReadySlot(dataSlot)

        # set window to center and show
        self.frameGeometry().moveCenter(
            QDesktopWidget().availableGeometry().center())

    def connectDataReadySlot(self, dataSlot):
        """ dataSlot is Qt slot for signaling converting ready state """
        if dataSlot:
            self.data_ready_signal.connect(dataSlot)

    def _charstersRangesInit(self):
        """ Init charsters sets ranges """

        cm_chr = self.cmBox_chars_sets

        cm_chr.insertItem(0, 'Full eng',
                          ''.join([chr(x) for x in range(ord(' '), ord('~'))]))
        cm_chr.insertItem(1, 'Upper eng (A-Z)',
                          ''.join([chr(x) for x in range(ord('A'), ord('Z'))]))
        cm_chr.insertItem(2, 'Lower eng (a-z)',
                          ''.join([chr(x) for x in range(ord('a'), ord('z'))]))

        cm_chr.insertItem(
            3, 'Full rus',
            ''.join([chr(x) for x in range(ord(u'А'), ord(u'я'))]))
        cm_chr.insertItem(
            4, 'Upper rus (А-Я)',
            ''.join([chr(x) for x in range(ord(u'А'), ord(u'Я'))]))
        cm_chr.insertItem(5, 'Lower rus (а-я)',
                          ''.join([chr(x) for x in range(ord('а'), ord('я'))]))

        cm_chr.insertItem(6, 'Full eng+rus',
                          cm_chr.itemData(0) + cm_chr.itemData(3))
        cm_chr.insertItem(7, 'Numbers (0-9)', '0123456789')

    @pyqtSlot()
    def _selectFont_slot(self):
        """
        Select Font slot
        """
        font, font_res = self.sysFont_dialog.getFont(self.font, None,
                                                     'Select Font')
        if font_res:
            name = NGL_Font.formatName(font.family(), font.pointSize(),
                                       font.bold())
            self.lineEdit_fontName.setText(name)
            self.font = font

    @pyqtSlot()
    def _add_chars_slot(self):
        """
        Add charsers sets to textBrowser
        """
        self.txtBrowser_chars.clear()
        chars_sets = self.cmBox_chars_sets.currentData()
        self.txtBrowser_chars.insertPlainText(chars_sets)

    @pyqtSlot()
    def _convert_slot(self):
        """
        Start converting slot
        """
        chars_sets = str(self.txtBrowser_chars.toPlainText())

        if chars_sets:
            gtime = time.time()

            # converting to ngl font
            name = self.lineEdit_fontName.text()
            self.NGL_Font = NFontConverter.convertQFont(
                chars_sets, name, self.font)
            ch_list = self.NGL_Font.get_chars_list()

            gtime = time.time() - gtime
            self.lbl_gen_time.setText(
                'converted at: %.2f sec  |  estimate code size: ~%0.3fk' %
                (gtime, self.NGL_Font.code_size_calc() / 1000))
            self.lbl_gen_time.update()

        else:
            QMessageBox.critical(
                self, 'ERROR', """ Nothing to convert!
                Add singles char or characters set to textbox first""")

    @pyqtSlot()
    def _view_out_slot(self, nfont=None):
        """ View converting out code """
        if nfont == None:
            self.nfont_view.view(self.NGL_Font)
        else:
            self.nfont_view.view(nfont)

    @pyqtSlot()
    def _edit_font_slot(self):
        odir = self.settings.value('open_last_dir', type=str)
        if not odir:
            odir = './'

        fileName, _ = QFileDialog.getOpenFileName(
            self,
            "Open NGL Font source for edit",
            odir,
            "Source ngl font Files (*.c);;All Files (*)",
            options=QFileDialog.DontUseNativeDialog)

        if fileName:
            self.settings.setValue('open_last_dir', os.path.dirname(fileName))

            # set parsed ngl font and show edit widget
            self.edit_view.setFontFile(fileName)
            self.edit_view.show()

    def _save(self, filepath, font):
        with open(filepath, 'w') as f:
            f.write(font.get_code().replace('\r\n', '\n'))

    @pyqtSlot()
    def _saveAs_slot(self):
        """
        Save out to file
        """
        if self.NGL_Font:
            file_name, sts = QFileDialog.getSaveFileName(
                self,
                "QFileDialog.getSaveFileName()",
                self.NGL_Font.name,
                "C files (*.c)",
                options=QFileDialog.Options()
                | QFileDialog.DontUseNativeDialog)
            if sts:
                self._save(file_name + '.c', self.NGL_Font)

    @pyqtSlot()
    def _ok_slot(self):
        if self.NGL_Font:
            self.data_ready_signal.emit(self.NGL_Font)
        else:
            QMessageBox.critical(self, 'ERROR', 'Font not convert!')

    @pyqtSlot()
    def _close_slot(self):
        self.close()

    def keyPressEvent(self, e):
        if e.key() == Qt.Key_Escape:
            self._close_slot()
Ejemplo n.º 6
0
class Main(Widget, QWidget):
    def __init__(self, widget_manager, info):
        # init
        Widget.__init__(self, widget_manager, info)
        QWidget.__init__(self)
        self.conf = {}
        self.lang = info.lang
        self.settings_win = None
        # setup layout
        self.setLayout(QVBoxLayout(self))
        self.layout().setContentsMargins(0, 0, 0, 0)
        # setup stylesheet
        with open(os.path.join(RES, 'net_stat', 'style.css'),
                  encoding='utf-8') as file:
            style = file.read()
            self.setStyleSheet(style)
        self.setAttribute(Qt.WA_TranslucentBackground)
        # setup timer
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.setup_ui)
        # setup vars
        self.stats = psutil.net_if_stats()
        self._widgets = []
        self._setup_vars()

    def _setup_vars(self):
        self._update = 1000
        self._round = 3
        self._labels = True
        self._pername = False
        self._names = [tuple(self.stats.keys())[0]]
        self._bar = True
        self._text = True
        self._srecv = True
        self._ssent = True
        self._trecv = True
        self._tsent = True
        self._precv = False
        self._psent = False
        self._errin = False
        self._errout = False
        self._dropin = False
        self._dropout = False
        self._con = True
        self._kind = 'inet'
        self._mbit = False
        self._old_counters = None
        self._max_recv_speed = 0
        self._max_sent_speed = 0
        self._palette = QPalette()
        self._palette.setColor(QPalette.WindowText, QColor('#000000'))
        self._font = QFont()

    @try_except()
    def setup_ui(self):
        if self._widgets:  # clear
            for w in self._widgets:
                self.layout().removeWidget(w)
                w.deleteLater()
            self._widgets.clear()
        # setup elements
        if not self._labels:
            self._add_label(self.lang['net'])
        counters = psutil.net_io_counters(self._pername)
        speed = False
        if self._old_counters and type(counters) == type(self._old_counters):
            speed = True
        else:
            self._old_counters = counters
        names = self._names if self._pername else [None]
        for name in names:
            if name:
                if name not in counters:
                    return
                if self._labels:
                    self._add_label(self.lang['net_name'].format(name))
            if speed:
                self.__setup_speed(counters, name)
            self.__setup_total(counters, name)
            self.__setup_packets(counters, name)
            self.__setup_errors(counters, name)
            self.__setup_drops(counters, name)
        self.__setup_con()
        # set layout
        self.layout().update()

    def get_rate_locale(self, rate) -> str:
        if rate == Rate.B:
            return self.lang['b']
        elif rate == Rate.KIB:
            return self.lang['kib']
        elif rate == Rate.MIB:
            return self.lang['mib']
        elif rate == Rate.GIB:
            return self.lang['gib']
        elif rate == Rate.TIB:
            return self.lang['tib']
        elif rate == Rate.MBIT:
            return self.lang['mbit']

    def _add_label(self, text):
        label = QLabel(text, self)
        label.setAlignment(Qt.AlignCenter)
        label.setPalette(self._palette)
        label.setFont(self._font)
        self._widgets.append(label)
        self.layout().addWidget(label)

    def _add_rate_label(self, b, loc_str):
        if self._mbit:
            value = get_mbit(b)
            rate = Rate.MBIT
        else:
            value, rate = get_rate(b)
        value = round(value, self._round)
        self._add_label(
            loc_str.format(count=value, rate=self.get_rate_locale(rate)))

    def __setup_speed(self, counters, name=None):
        def setup_bar(b, max_b):
            if not self._bar:
                return
            bar = QProgressBar(self)
            bar.setMinimum(0)
            bar.setMaximum(100)
            bar.setValue(get_percent(b, max_b))
            self._widgets.append(bar)
            self.layout().addWidget(bar)

        def get_max_speed() -> float:
            result = 0
            for name in self.stats:
                if self.stats[name].speed > result:
                    result = self.stats[name].speed
            return get_bytes_from_mbit(result)

        def get_speed(speed, name) -> float:
            result = speed
            if name:
                if name in self.stats and self.stats[name].speed:
                    result = get_bytes_from_mbit(self.stats[name].speed)
            else:
                speed2 = get_max_speed()
                if speed2 > speed:
                    result = speed2
            return result

        if name:
            recv_speed = (counters[name].bytes_recv -
                          self._old_counters[name].bytes_recv)
            sent_speed = (counters[name].bytes_sent -
                          self._old_counters[name].bytes_sent)
        else:
            recv_speed = (counters.bytes_recv - self._old_counters.bytes_recv)
            sent_speed = (counters.bytes_sent - self._old_counters.bytes_sent)
        if self._srecv:
            if recv_speed > self._max_recv_speed:
                self._max_recv_speed = recv_speed
            setup_bar(recv_speed, get_speed(self._max_recv_speed, name))
            if self._text:
                self._add_rate_label(recv_speed, self.lang['speed_recv'])
        if self._ssent:
            if sent_speed > self._max_sent_speed:
                self._max_sent_speed = sent_speed
            setup_bar(sent_speed, get_speed(self._max_sent_speed, name))
            if self._text:
                self._add_rate_label(sent_speed, self.lang['speed_sent'])
        self._old_counters = counters

    def __setup_total(self, counters, name=None):
        if self._trecv:
            b = counters[name].bytes_recv if name else counters.bytes_recv
            self._add_rate_label(b, self.lang['total_recv'])
        if self._tsent:
            b = counters[name].bytes_sent if name else counters.bytes_sent
            self._add_rate_label(b, self.lang['total_sent'])

    def __setup_packets(self, counters, name=None):
        if self._precv:
            p = counters[name].packets_recv if name else counters.packets_recv
            self._add_label(self.lang['packets_recv'].format(str(p)))
        if self._psent:
            p = counters[name].packets_sent if name else counters.packets_sent
            self._add_label(self.lang['packets_sent'].format(str(p)))

    def __setup_errors(self, counters, name=None):
        if self._errin:
            e = counters[name].errin if name else counters.errin
            self._add_label(self.lang['errin'].format(str(e)))
        if self._errout:
            e = counters[name].errout if name else counters.errout
            self._add_label(self.lang['errout'].format(str(e)))

    def __setup_drops(self, counters, name=None):
        if self._dropin:
            d = counters[name].dropin if name else counters.dropin
            self._add_label(self.lang['dropin'].format(str(d)))
        if self._dropout:
            d = counters[name].dropout if name else counters.dropout
            self._add_label(self.lang['dropout'].format(str(d)))

    def __setup_con(self):
        if self._con:
            con = str(len(psutil.net_connections(self._kind)))
            self._add_label(self.lang['connections'].format(con))

    def _load_settings(self):
        self.conf = self.widget_manager.get_config(self.info.NAME)
        if 'update' in self.conf:
            self._update = int(self.conf['update'])
        if 'round' in self.conf:
            self._round = int(self.conf['round'])
        if 'labels' in self.conf:
            self._labels = bool(strtobool(self.conf['labels']))
        if 'pername' in self.conf:
            self._pername = bool(strtobool(self.conf['pername']))
        if 'names' in self.conf:
            self._names = json.loads(self.conf['names'])
        if 'bar' in self.conf:
            self._bar = bool(strtobool(self.conf['bar']))
        if 'text' in self.conf:
            self._text = bool(strtobool(self.conf['text']))
        if 'srecv' in self.conf:
            self._srecv = bool(strtobool(self.conf['srecv']))
        if 'ssent' in self.conf:
            self._ssent = bool(strtobool(self.conf['ssent']))
        if 'trecv' in self.conf:
            self._trecv = bool(strtobool(self.conf['trecv']))
        if 'tsent' in self.conf:
            self._tsent = bool(strtobool(self.conf['tsent']))
        if 'precv' in self.conf:
            self._precv = bool(strtobool(self.conf['precv']))
        if 'psent' in self.conf:
            self._psent = bool(strtobool(self.conf['psent']))
        if 'errin' in self.conf:
            self._errin = bool(strtobool(self.conf['errin']))
        if 'errout' in self.conf:
            self._errout = bool(strtobool(self.conf['errout']))
        if 'dropin' in self.conf:
            self._dropin = bool(strtobool(self.conf['dropin']))
        if 'dropout' in self.conf:
            self._dropout = bool(strtobool(self.conf['dropout']))
        if 'con' in self.conf:
            self._con = bool(strtobool(self.conf['con']))
        if 'kind' in self.conf:
            self._kind = self.conf['kind']
        if 'mbit' in self.conf:
            self._mbit = bool(strtobool(self.conf['mbit']))
        if 'color' in self.conf:
            self._palette.setColor(QPalette.WindowText,
                                   QColor(self.conf['color']))
        if 'size' in self.conf:
            self._font.setPointSize(int(self.conf['size']))
        if 'bold' in self.conf:
            self._font.setBold(bool(strtobool(self.conf['bold'])))

    @try_except()
    def save_settings(self):
        self.conf['update'] = str(self._update)
        self.conf['round'] = str(self._round)
        self.conf['labels'] = str(self._labels)
        self.conf['pername'] = str(self._pername)
        self.conf['names'] = json.dumps(self._names)
        self.conf['bar'] = str(self._bar)
        self.conf['text'] = str(self._text)
        self.conf['srecv'] = str(self._srecv)
        self.conf['ssent'] = str(self._ssent)
        self.conf['trecv'] = str(self._trecv)
        self.conf['tsent'] = str(self._tsent)
        self.conf['precv'] = str(self._precv)
        self.conf['psent'] = str(self._psent)
        self.conf['errin'] = str(self._errin)
        self.conf['errout'] = str(self._errout)
        self.conf['dropin'] = str(self._dropin)
        self.conf['dropout'] = str(self._dropout)
        self.conf['con'] = str(self._con)
        self.conf['kind'] = self._kind
        self.conf['mbit'] = str(self._mbit)
        self.conf['color'] = self._palette.color(QPalette.WindowText).name()
        self.conf['size'] = str(self._font.pointSize())
        self.conf['bold'] = str(self._font.bold())

    @try_except()
    def show_settings(self):
        self.settings_win = Settings(self)

    def unload(self):
        self.save_settings()

    def place(self):
        self.resize(200, 200)
        self._load_settings()

    def boot(self):
        self._load_settings()

    def remove(self):
        self.timer.stop()

    def purge(self):
        self.timer.stop()
        self._setup_vars()

    @try_except()
    def showEvent(self, event):
        self.setup_ui()
        self.timer.start(self._update)

    @try_except()
    def hideEvent(self, event):
        self.timer.stop()
Ejemplo n.º 7
0
class Text(DesignItem):
    def __init__(self, text, scene):
        super(Text, self).__init__(scene)
        self.font = QFont("Arial")
        self.font.setPointSize(14)
        self.font.setStyleName("Standard")
        self.text = text
        self.textcolor = QColor(Qt.black)

        self.data = str.encode(self.getSvg())
        self.renderer = QSvgRenderer()
        self.renderer.load(self.data)
        self.svg = QGraphicsSvgItem(self)
        self.svg.setSharedRenderer(self.renderer)
        self.setRect(0, 0,
                     self.svg.boundingRect().width(),
                     self.svg.boundingRect().height())

    def typeName(self):
        return "Text"

    def paint(self, paint, option, widget):
        if option.state & QStyle.State_Selected:
            self.drawHighlightSelected(paint, option)

    def getTextTag(self, id):
        fm = QFontMetrics(self.font)
        svg = "<text "
        if id:
            svg += "id=\"" + id + "\" "
        svg += "x=\"0\" y=\"" + str(fm.ascent()) + "\" "
        svg += "font-family=\"" + self.font.family() + "\" "
        svg += "font-size=\"" + str(self.font.pointSize() * 1.25) + "px\" "
        if self.font.bold():
            svg += "font-weight=\"bold\" "
        if self.font.italic():
            svg += "font-style=\"italic\" "
        svg += "fill=\"" + self.textcolor.name() + "\" "
        svg += "opacity=\"" + str(self.opacity()) + "\" "
        svg += ">"
        svg += self.text
        svg += "</text>"
        return svg

    def getSvg(self):
        font = QFont(self.font.family())
        font.setBold(self.font.bold())
        font.setItalic(self.font.italic())
        font.setPixelSize(self.font.pointSize() * 1.25)
        fm = QFontMetrics(font)
        self.width = fm.width(self.text) + 2
        self.height = fm.height()

        svg = "<svg width=\"" + str(self.width) + "\" "
        svg += "height=\"" + str(self.height) + "\" >"
        svg += self.getTextTag("")
        svg += "</svg>"
        return svg

    def setScale(self, x, y):
        self.xscale = x
        self.yscale = y
        trans = QTransform()
        trans.scale(self.xscale, self.yscale)
        self.svg.setTransform(trans)
        self.setRect(0, 0,
                     self.svg.boundingRect().width() * x,
                     self.svg.boundingRect().height() * y)

    def scaleObjects(self):
        self.xscale = self.rect.width() / self.svg.boundingRect().width()
        self.yscale = self.rect.height() / self.svg.boundingRect().height()
        trans = QTransform()
        trans.scale(self.xscale, self.yscale)
        self.svg.setTransform(trans)
Ejemplo n.º 8
0
class Main(Widget, QWidget):
    def __init__(self, widget_manager, info):
        # init
        Widget.__init__(self, widget_manager, info)
        QWidget.__init__(self)
        self.conf = {}
        self.lang = info.lang
        self.settings_win = None
        # setup layout
        self.setLayout(QVBoxLayout(self))
        self.layout().setContentsMargins(0, 0, 0, 0)
        # setup stylesheet
        with open(os.path.join(RES, 'ram', 'style.css'),
                  encoding='utf-8') as file:
            style = file.read()
            self.setStyleSheet(style)
        self.setAttribute(Qt.WA_TranslucentBackground)
        # setup timer
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.setup_ui)
        # setup vars
        self._widgets = []
        self._setup_vars()

    def _setup_vars(self):
        self._update = 1000
        self._round = 3
        self._labels = True
        self._text = True
        self._mb = False
        self._ram = True
        self._swap = True
        self._palette = QPalette()
        self._palette.setColor(QPalette.WindowText, QColor('#000000'))
        self._font = QFont()

    def __set_info(self, swap=False):
        mem = psutil.swap_memory() if swap else psutil.virtual_memory()
        p = pow(2, 20) if self._mb else pow(2, 30)
        total = round(mem.total / p, self._round)
        used = round(mem.used / p if swap else (mem.total - mem.available) / p,
                     self._round)
        percent = round(
            mem.percent if swap else
            (mem.total - mem.available) / mem.total * 100, 0)
        if self._labels:
            text = self.lang['swap'] if swap else self.lang['ram']
            label = QLabel(text, self)
            label.setAlignment(Qt.AlignCenter)
            label.setPalette(self._palette)
            label.setFont(self._font)
            self._widgets.append(label)
            self.layout().addWidget(label)
        bar = QProgressBar(self)
        bar.setMinimum(0)
        bar.setMaximum(100)
        bar.setValue(percent)
        self._widgets.append(bar)
        self.layout().addWidget(bar)
        if self._text:
            text = self.lang['text_mb'] if self._mb else \
                self.lang['text_gb']
            d = {'t': str(total), 'u': str(used)}
            label = QLabel(text.format(**d), self)
            label.setAlignment(Qt.AlignCenter)
            label.setPalette(self._palette)
            label.setFont(self._font)
            self._widgets.append(label)
            self.layout().addWidget(label)

    @try_except()
    def setup_ui(self):
        if self._widgets:  # clear
            for w in self._widgets:
                self.layout().removeWidget(w)
                w.deleteLater()
            self._widgets.clear()
        # setup elements
        if self._ram:
            self.__set_info()
        if self._swap:
            self.__set_info(True)
        # set layout
        self.layout().update()

    def _load_settings(self):
        self.conf = self.widget_manager.get_config(self.info.NAME)
        if 'update' in self.conf:
            self._update = int(self.conf['update'])
        if 'round' in self.conf:
            self._round = int(self.conf['round'])
        if 'labels' in self.conf:
            self._labels = bool(strtobool(self.conf['labels']))
        if 'text' in self.conf:
            self._text = bool(strtobool(self.conf['text']))
        if 'mb' in self.conf:
            self._mb = bool(strtobool(self.conf['mb']))
        if 'ram' in self.conf:
            self._ram = bool(strtobool(self.conf['ram']))
        if 'swap' in self.conf:
            self._swap = bool(strtobool(self.conf['swap']))
        if 'color' in self.conf:
            self._palette.setColor(QPalette.WindowText,
                                   QColor(self.conf['color']))
        if 'size' in self.conf:
            self._font.setPointSize(int(self.conf['size']))
        if 'bold' in self.conf:
            self._font.setBold(bool(strtobool(self.conf['bold'])))

    def save_settings(self):
        self.conf['update'] = str(self._update)
        self.conf['round'] = str(self._round)
        self.conf['labels'] = str(self._labels)
        self.conf['text'] = str(self._text)
        self.conf['mb'] = str(self._mb)
        self.conf['ram'] = str(self._ram)
        self.conf['swap'] = str(self._swap)
        self.conf['color'] = self._palette.color(QPalette.WindowText).name()
        self.conf['size'] = str(self._font.pointSize())
        self.conf['bold'] = str(self._font.bold())

    @try_except()
    def show_settings(self):
        self.settings_win = Settings(self)

    def unload(self):
        self.save_settings()

    def place(self):
        self.resize(200, 200)
        self._load_settings()

    def boot(self):
        self._load_settings()

    def remove(self):
        self.timer.stop()

    def purge(self):
        self.timer.stop()
        self._setup_vars()

    @try_except()
    def showEvent(self, event):
        self.setup_ui()
        self.timer.start(self._update)

    @try_except()
    def hideEvent(self, event):
        self.timer.stop()
Ejemplo n.º 9
0
class Main(Widget, QWidget):
    def __init__(self, widget_manager, info):
        # init
        Widget.__init__(self, widget_manager, info)
        QWidget.__init__(self)
        self.conf = {}
        self.lang = info.lang
        self.settings_win = None
        # setup layout
        self.setLayout(QVBoxLayout(self))
        self.layout().setContentsMargins(0, 0, 0, 0)
        # setup stylesheet
        with open(os.path.join(RES, 'cpu', 'style.css'),
                  encoding='utf-8') as file:
            style = file.read()
            self.setStyleSheet(style)
        self.setAttribute(Qt.WA_TranslucentBackground)
        # setup timer
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.setup_ui)
        # setup vars
        self._widgets = []
        self._setup_vars()

    def _setup_vars(self):
        self._update = 1000
        self._round = 3
        self._percpu = False
        self._percent = True
        self._freq = True
        self._labels = True
        self._text = True
        self._palette = QPalette()
        self._palette.setColor(QPalette.WindowText, QColor('#000000'))
        self._font = QFont()

    @try_except()
    def setup_ui(self):
        if self._widgets:  # clear
            for w in self._widgets:
                self.layout().removeWidget(w)
                w.deleteLater()
            self._widgets.clear()
        # setup elements
        for i in range(psutil.cpu_count() if self._percpu else 1):
            if self._percent:  # percents
                pc = psutil.cpu_percent(percpu=self._percpu)
                if self._labels:  # titles
                    text = self.lang['proc']
                    if self._percpu:
                        text = self.lang['core'].format(str(i))
                    label = QLabel(text, self)
                    label.setAlignment(Qt.AlignCenter)
                    self._widgets.append(label)
                    self.layout().addWidget(label)
                bar = QProgressBar(self)
                bar.setMinimum(0)
                bar.setMaximum(100)
                bar.setValue(int(pc[i]) if self._percpu else int(pc))
                self._widgets.append(bar)
                self.layout().addWidget(bar)
            if self._freq and 'cpu_freq' in psutil.__dict__:  # freqs
                pf = psutil.cpu_freq(self._percpu)
                if self._labels:  # titles
                    text = self.lang['freq']
                    if self._percpu:
                        text = self.lang['core_freq'].format(str(i))
                    label = QLabel(text, self)
                    label.setAlignment(Qt.AlignCenter)
                    label.setPalette(self._palette)
                    label.setFont(self._font)
                    self._widgets.append(label)
                    self.layout().addWidget(label)
                bar = QProgressBar(self)
                bar.setMinimum(int(pf[i].min) if self._percpu else int(pf.min))
                bar.setMaximum(int(pf[i].max) if self._percpu else int(pf.max))
                bar.setValue(
                    int(pf[i].current) if self._percpu else int(pf.current))
                self._widgets.append(bar)
                self.layout().addWidget(bar)
                if self._text:  # text info
                    text = str(round(pf[i].current, self._round)) if \
                        self._percpu else \
                        str(round(pf.current, self._round))
                    label = QLabel(self.lang['freq_text'].format(text))
                    label.setAlignment(Qt.AlignCenter)
                    label.setPalette(self._palette)
                    label.setFont(self._font)
                    self._widgets.append(label)
                    self.layout().addWidget(label)
        # set layout
        self.layout().update()

    def _load_settings(self):
        self.conf = self.widget_manager.get_config(self.info.NAME)
        if 'update' in self.conf:
            self._update = int(self.conf['update'])
        if 'round' in self.conf:
            self._round = int(self.conf['round'])
        if 'percpu' in self.conf:
            self._percpu = bool(strtobool(self.conf['percpu']))
        if 'percent' in self.conf:
            self._percent = bool(strtobool(self.conf['percent']))
        if 'freq' in self.conf:
            self._freq = bool(strtobool(self.conf['freq']))
        if 'labels' in self.conf:
            self._labels = bool(strtobool(self.conf['labels']))
        if 'text' in self.conf:
            self._text = bool(strtobool(self.conf['text']))
        if 'color' in self.conf:
            self._palette.setColor(QPalette.WindowText,
                                   QColor(self.conf['color']))
        if 'size' in self.conf:
            self._font.setPointSize(int(self.conf['size']))
        if 'bold' in self.conf:
            self._font.setBold(bool(strtobool(self.conf['bold'])))

    @try_except()
    def save_settings(self):
        self.conf['update'] = str(self._update)
        self.conf['round'] = str(self._round)
        self.conf['percpu'] = str(self._percpu)
        self.conf['percent'] = str(self._percent)
        self.conf['freq'] = str(self._freq)
        self.conf['labels'] = str(self._labels)
        self.conf['text'] = str(self._text)
        self.conf['color'] = self._palette.color(QPalette.WindowText).name()
        self.conf['size'] = str(self._font.pointSize())
        self.conf['bold'] = str(self._font.bold())

    @try_except()
    def show_settings(self):
        self.settings_win = Settings(self)

    def unload(self):
        self.save_settings()

    def place(self):
        self.resize(200, 200)
        self._load_settings()

    def boot(self):
        self._load_settings()

    def remove(self):
        self.timer.stop()

    def purge(self):
        self.timer.stop()
        self._setup_vars()

    @try_except()
    def showEvent(self, event):
        self.setup_ui()
        self.timer.start(self._update)

    @try_except()
    def hideEvent(self, event):
        self.timer.stop()