≡ Menu

Un orologio analogico in PyQT6

Lo scopo del codice è quello di realizzare un orologio analogico in Python, usando le librerie di PyQt6.

Iniziamo dal semplice schema realizzato con QT Designer, in cui c’è solo una QLabel (label_clock) che occupa l’intero QWidget. Su tale label stamperemo, ogni secondo, l’orario. Salviamo lo schema (clock.ui) e procediamo ad editare il codice di controllo.

La struttura iniziale del file è la seguente:

#!/usr/bin/python
from PyQt6.QtWidgets import QApplication, QWidget
from PyQt6 import uic
from PyQt6.QtCore import QTimer, QTime, Qt
import sys

class AppClock(QWidget):
    def __init__(self):
        super().__init__()
        
        uic.loadUi('clock.ui', self)
        self.setFixedSize(540, 164)

app = QApplication(sys.argv)
window = AppClock()
window.show()
app.exec()

Iniziamo a popolare il codice scrivendo il metodo della classe AppClock che stamperà nella label_clock l’orario corrente:

def displayTime(self):
        currentTime = QTime.currentTime()
        displayText = currentTime.toString('hh:mm:ss')
        self.label_clock.setText(displayText) #
  • memorizziamo l’orario corrente in currentTime;
  • scegliamo il formato da visualizzare e memorizziamolo in displayText;
  • stampiamo la variabile displayText nella label_clock.

Costruiamo, ora, l’oggetto timer che si occuperà di richiamare la funzione currentTime ogni secondo:

# timer is a instance of QTimer
        timer = QTimer(self)
        timer.timeout.connect(self.displayTime)
        timer.start(1000) #1 second

Il progetto completo può essere scaricato da qui.

{ 0 comments }

Building Calculator using PyQt6 in Python

In this article we will see how we can create a calculator using PyQt6.
A calculator is something used for making mathematical calculations, in particular a small electronic device with a keyboard and a visual display. Below is the how the calculator will looks like

GUI implementation steps 

  • Create a label to show the numbers and the output and set its geometry 
  • Align the label text fro right side and increase the font size of it 
  • Create push buttons for the numbers from 0 to 9 and set their geometry in the proper order 
  • Create operator push button example for addition, subtraction etc 

Back end implementation steps

  • Add action to each button 
  • Inside the actions of each button except the equals to action, append the text of the label with the respective number or the operator 
  • Inside the equals to action get the text of the label and start the try except block 
  • Inside the try block use eval method on the label text to get the ans and set the answer to the label 
  • Inside the except block set “ERROR” as text 
  • For delete action make the last character removed from the label and for the clear action set the whole text to blank.

Here, you can download the code sources.

{ 0 comments }

Define a Prime Number function generator

import matplotlib.pyplot as plt
import time


def timer(func):
    def wrapper(*args, **kwargs):
        before = time.time()
        result = func(*args, **kwargs)
        print('Function took:', time.time() - before, " seconds")
        return result
    return wrapper


@timer
def pattern_1(end_value):
    
    start = 1
    xs = []
    ys = []
    for val in range(start, end_value + 1): 
        if val > 1:
            for n in range(2, val): 
                if (val % n) == 0: 
                       break
            else:
                xs.append(val)
                ys.append(val)



    fig = plt.figure(figsize=(15, 15))
    plt.polar(xs, ys, 'g.')
    ax = plt.gca()



pattern_1(100)
plt.show()

Run program for 100 iterations

Run program for 1000 iterations

Run program for 10000 iterations

Run program for 100000 iterations

Run program for 1000000 iterations

{ 0 comments }

QtFIGLet…

88888888888888888 .d8888b. 888             888    
888         888  d88P  Y88b888             888    
888         888  888    888888             888    
8888888     888  888       888      .d88b. 888888 
888         888  888  88888888     d8P  Y8b888    
888         888  888    888888     88888888888    
888         888  Y88b  d88P888     Y8b.    Y88b.  
888       8888888 "Y8888P8888888888 "Y8888  "Y888 
                                                  

FIGlet è un software libero per creare banner mediante l’utilizzo di semplici caratteri testuali (la cosiddetta ASCII art). Qui se ne propone una semplice variante scritta in Python e PyQt6 usando la libreria PyFiglet.

Di seguito se ne riporta lo schema dell’interfaccia grafica

e il codice sorgente:

#!/usr/bin/python
from PyQt6.QtWidgets import QApplication, QWidget
from PyQt6 import uic
import pyfiglet
class Ui(QWidget):
    def __init__(self):
        super().__init__()
        uic.loadUi('figlet.ui', self)
        self.setFixedSize(510, 350)
        
    def pB_FigletClick(self):
        try:
            testo = self.lE_testo.text()
            result = pyfiglet.figlet_format(testo, font='colossal')
            self.pTE_Figlet.setPlainText(result)
        except:
            print("Testo non valido")   
    
    def lE_testoChange(self):
        self.pTE_Figlet.clear()
app = QApplication([])
window = Ui()
window.show()
app.exec()

Qui, invece, un esempio di come funziona il programma:

{ 0 comments }

Nel corpo…

L’ho conosciuta otto anni fa. Frequentava il mio corso. Io non insegno piú a tempo pieno, e se volessi essere preciso dovrei dire che non insegno letteratura…

Philip Roth, da L’animale morente

{ 0 comments }

Come foglie…

…e le foglie, che hanno aspettato lunghissimi mesi per poter tingersi a festa (e buttarsi poi di sotto).

{ 0 comments }

…uno spirito libero

Caccioppoli era innanzitutto uno spirito libero, un eccezionale pianista, un filosofo e un poeta.

Luciano De Crescenzo, da Storia della filosofia greca.

{ 0 comments }

NACA, Python e PyQt5…

I profili alari NACA sono particolari forme di profilo alare studiati dalla National Advisory Committee for Aeronautics (NACA) statunitense. La forma di un profilo alare NACA è descritta mediante la parola “NACA” seguita da un numero. I valori presenti in tale codice numerico possono essere inseriti nelle equazioni per calcolare le proprietà della sezione alare.

Le sezioni alari NACA a quattro cifre definiscono il profilo in questo modo:

  1. la prima cifra indica la curvatura massima come percentuale della corda;
  2. la seconda cifra fornisce la distanza del punto di massima curvatura dal bordo d’attacco espressa come percentuale della corda e in multipli di 10;
  3. le ultime due cifre descrivono il massimo spessore del profilo alare espresso come percentuale della corda.

La distribuzione degli spessori, lungo la linea media è:

dove:

  • c è la lunghezza della corda;
  • x è la posizione lungo la corda da 0 a c;
  • yt è metà dello spessore ad un dato valore di x;
  • t è lo spessore massimo espresso come frazione della corda, in modo che 100 t sia uguale alle ultime due cifre del codice NACA.

Si noti che in questa equazione, a (x/c) = 1 (il bordo d’uscita del profilo), lo spessore non è esattamente uguale a zero. Se per motivi computazionali è necessario uno spessore nullo al bordo d’uscita, si deve modificare uno dei coefficienti in modo che la loro somma dia zero. Modificando l’ultimo coefficiente a −0,1036, ad esempio, produrrà un piccolo cambiamento nella forma generale del profilo. Il bordo d’attacco è approssimabile ad un cilindro con raggio uguale a:

{\displaystyle r=1{,}1019\,t^{2}.\,}

L’equazione della curvatura del profilo è:

dove:

  • m è la massima curvatura espressa come percentuale della corda ed è la prima delle quattro cifre del codice;
  • p è la posizione della massima curvatura, espressa in multipli di 10 e come percentuale della corda, ed è la seconda cifra del codice.

Qui si propone un codice per generare i profili NACA della serie a quattro cifre sfruttando le potenzialità di Python e delle librerie PyQt5 e Matplotlib.

I sorgenti completi del progetto possono essere scaricati dal mio GitHub.

{ 0 comments }

an essential tool for mathematics

I believe the blackboard is an essential tool for mathematics. Usually, to solve (or find) a problem, you have to make many incorrect guesses or other mistakes first. Writing on a blackboard is easily edited, which is useful in the process of shaping one’s own thoughts in the process of solving a problem. On paper, even pencil is more difficult to erase, so there is some underlying pressure not to waste space with ideas perceived to be bad — but these “bad” ideas might actually turn out to be very important, or at least inspire progress. Because writing on a blackboard is temporary, it is very easy to put an idea up and see what happens next.

from Do Not Erase: Mathematicians and Their Chalkboards by Wynne, Jessica.

{ 0 comments }