[GUI avec Python] PyQt5-Widget personnalisé-

Suite de Dernière fois

Custom widgets Je vais résumer grossièrement ce site en japonais.

[Widget de gravure]

Burning_widget.py


#!/usr/bin/python3
# -*- coding: utf-8 -*-


import sys
from PyQt5.QtWidgets import (QWidget, QSlider, QApplication, 
    QHBoxLayout, QVBoxLayout)
from PyQt5.QtCore import QObject, Qt, pyqtSignal
from PyQt5.QtGui import QPainter, QFont, QColor, QPen


class Communicate(QObject):
    
    updateBW = pyqtSignal(int)


class BurningWidget(QWidget):
  
    def __init__(self):      
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):
        
        #Définissez la taille minimale du widget de gravure
        self.setMinimumSize(1, 30)
        #Définir la position où la couleur arrive
        self.value = 75
        #Réglage de l'échelle
        self.num = [75, 150, 225, 300, 375, 450, 525, 600, 675]


    def setValue(self, value):

        self.value = value


    def paintEvent(self, e):
      
        qp = QPainter()
        qp.begin(self)
        self.drawWidget(qp)
        qp.end()
      
      
    def drawWidget(self, qp):
      
        #Paramètres de police
        font = QFont('Serif', 7, QFont.Light)
        qp.setFont(font)

        #Dimensionnement du widget de gravure
        size = self.size()
        w = size.width()
        h = size.height()

        step = int(round(w / 10.0))

        #Toute la zone à colorier
        till = int(((w / 750.0) * self.value))
        #Zone colorée en rouge
        full = int(((w / 750.0) * 700))

        #Réglage de la couleur pour les zones colorées en rouge
        if self.value >= 700:
            
            qp.setPen(QColor(255, 255, 255))
            qp.setBrush(QColor(255, 255, 184))
            qp.drawRect(0, 0, full, h)
            qp.setPen(QColor(255, 175, 175))
            qp.setBrush(QColor(255, 175, 175))
            qp.drawRect(full, 0, till-full, h)
            
        #Paramètres de couleur autres que la zone colorée en rouge
        else:
            
            qp.setPen(QColor(255, 255, 255))
            qp.setBrush(QColor(255, 255, 184))
            qp.drawRect(0, 0, till, h)

        #Fond de widget brûlant
        pen = QPen(QColor(20, 20, 20), 1, 
            Qt.SolidLine)
            
        qp.setPen(pen)
        qp.setBrush(Qt.NoBrush)
        qp.drawRect(0, 0, w-1, h-1)

        j = 0

        #Ecrire une échelle
        for i in range(step, 10*step, step):
          
            qp.drawLine(i, 0, i, 5)
            metrics = qp.fontMetrics()
            fw = metrics.width(str(self.num[j]))
            qp.drawText(i-fw/2, h/2, str(self.num[j]))
            j = j + 1
            

class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):      

        sld = QSlider(Qt.Horizontal, self)
        sld.setFocusPolicy(Qt.NoFocus)
        sld.setRange(1, 750)
        sld.setValue(75)
        sld.setGeometry(30, 40, 150, 30)

        self.c = Communicate()        
        self.wid = BurningWidget()
        self.c.updateBW[int].connect(self.wid.setValue)

        #Appel de la fonction changeValue lors du déplacement du curseur
        sld.valueChanged[int].connect(self.changeValue)
        hbox = QHBoxLayout()
        hbox.addWidget(self.wid)
        vbox = QVBoxLayout()
        vbox.addStretch(1)
        vbox.addLayout(hbox)
        self.setLayout(vbox)
        
        self.setGeometry(300, 300, 390, 210)
        self.setWindowTitle('Burning widget')
        self.show()
        
        
    def changeValue(self, value):
             
        #Envoyer la valeur actuelle du curseur
        self.c.updateBW.emit(value)        
        self.wid.repaint()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
burning_widget.png

Recommended Posts

[GUI avec Python] PyQt5-Widget personnalisé-
[GUI avec Python] PyQt5 -Widget II-
[GUI en Python] PyQt5 -Widget-
[GUI avec Python] PyQt5-Préparation-
[GUI avec Python] PyQt5 -Paint-
J'ai créé une application graphique avec Python + PyQt5
Présentation de l'interface graphique: PyQt5 en Python
[GUI en Python] PyQt5 -Event-
[GUI avec Python] PyQt5-La première étape-
[GUI en Python] PyQt5-Glisser-déposer-
Utilisez des scripts personnalisés Python avec StackStorm
J'ai joué avec PyQt5 et Python3
[Azure] Hit Custom Vision Service avec Python
Construction d'interface graphique heureuse avec électron et python
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
Grattage avec Python
Python avec Go
Twilio avec Python
Jouez avec 2016-Python
Testé avec Python
avec syntaxe (Python)
Bingo avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
Outil de rognage d'image GUI réalisé avec Python + Tkinter
Automatisation de l'interface graphique avec le pilote d'application Python x Windows
Créer un widget avec une couleur spécifiée avec Python + Qt (PySide)
Création d'un outil de vente simple avec Python GUI: création de devis
Ouvrir la boîte de dialogue de fichier avec l'interface graphique Python (tkinter.filedialog)
Communication série avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
Communication de socket avec Python
Analyse de données avec python 2
Grattage en Python (préparation)
Essayez de gratter avec Python.
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Exécutez Python avec VBA
Manipuler yaml avec python
Résolvez AtCoder 167 avec python
Communication série avec python
[Python] Utiliser JSON avec Python
Apprendre Python avec ChemTHEATER 05-1
Apprenez Python avec ChemTHEATER
1.1 Premiers pas avec Python
Binarisation avec OpenCV / Python
3. 3. Programmation IA avec Python
Méthode Kernel avec Python
Non bloquant avec Python + uWSGI
Grattage avec Python + PhantomJS
Publier des tweets avec python
Conduisez WebDriver avec python
Utiliser mecab avec Python 3
Récapitulatif des outils d'exploitation de l'interface graphique Windows avec Python