[GUI mit Python] PyQt5 -Custom Widget-

Fortsetzung von Letztes Mal

Custom widgets Ich werde diese Seite grob auf Japanisch zusammenfassen.

[Brennendes Widget]

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):
        
        #Legen Sie die Mindestgröße des brennenden Widgets fest
        self.setMinimumSize(1, 30)
        #Stellen Sie die Position ein, an der die Farbe eintrifft
        self.value = 75
        #Skalierungseinstellung
        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):
      
        #Schriftarteinstellungen
        font = QFont('Serif', 7, QFont.Light)
        qp.setFont(font)

        #Größe des brennenden Widgets
        size = self.size()
        w = size.width()
        h = size.height()

        step = int(round(w / 10.0))

        #Der gesamte zu färbende Bereich
        till = int(((w / 750.0) * self.value))
        #Bereich rot gefärbt
        full = int(((w / 750.0) * 700))

        #Farbeinstellung für rot gefärbte Bereiche
        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)
            
        #Andere Farbeinstellungen als der rot gefärbte Bereich
        else:
            
            qp.setPen(QColor(255, 255, 255))
            qp.setBrush(QColor(255, 255, 184))
            qp.drawRect(0, 0, till, h)

        #Brennender Widget-Hintergrund
        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

        #Schreiben Sie eine Skala
        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)

        #Aufrufen der Funktion changeValue beim Verschieben des Schiebereglers
        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):
             
        #Senden Sie den aktuellen Wert des Schiebereglers
        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 mit Python] PyQt5 -Custom Widget-
[GUI mit Python] PyQt5 -Widget II-
[GUI in Python] PyQt5 -Widget-
[GUI mit Python] PyQt5-Vorbereitung-
[GUI mit Python] PyQt5 -Paint-
Ich habe eine GUI-App mit Python + PyQt5 erstellt
Einführung in die GUI: PyQt5 in Python
[GUI in Python] PyQt5 -Event-
[GUI mit Python] PyQt5-Der erste Schritt-
[GUI in Python] PyQt5-Drag & Drop-
Verwenden Sie benutzerdefinierte Python-Skripte mit StackStorm
Ich habe mit PyQt5 und Python3 gespielt
[Azure] Klicken Sie mit Python auf Custom Vision Service
Fröhliche GUI-Konstruktion mit Elektron und Python
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
Scraping mit Python
Python mit Go
Twilio mit Python
Spielen Sie mit 2016-Python
Getestet mit Python
mit Syntax (Python)
Bingo mit Python
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
GUI-Bildschneidewerkzeug mit Python + Tkinter
GUI-Automatisierung mit Python x Windows App Driver
Erstellen Sie mit Python + Qt (PySide) ein farbspezifisches Widget.
Einfache Erstellung von Verkaufstools mit Python-GUI: Schätzung erstellen
Dateidialog mit Python-GUI öffnen (tkinter.filedialog)
Serielle Kommunikation mit Python
Zip, entpacken mit Python
Django 1.11 wurde mit Python3.6 gestartet
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Socket-Kommunikation mit Python
Datenanalyse mit Python 2
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Python lernen mit ChemTHEATER 03
Sequentielle Suche mit Python
"Objektorientiert" mit Python gelernt
Führen Sie Python mit VBA aus
Umgang mit Yaml mit Python
Löse AtCoder 167 mit Python
Serielle Kommunikation mit Python
[Python] Verwenden Sie JSON mit Python
Python lernen mit ChemTHEATER 05-1
Lerne Python mit ChemTHEATER
1.1 Erste Schritte mit Python
Binarisierung mit OpenCV / Python
3. 3. KI-Programmierung mit Python
Kernel-Methode mit Python
Nicht blockierend mit Python + uWSGI
Scraping mit Python + PhantomJS
Tweets mit Python posten
Fahren Sie WebDriver mit Python
Verwenden Sie Mecab mit Python 3
Zusammenfassung der Tools zum Betreiben der Windows-Benutzeroberfläche mit Python