≡ Menu

valga come risposta…

Che a restare incinte siamo noi donne, che a partorire siamo noi donne, che a morire partorendo, o abortendo, siamo noi. E che la scelta tocca dunque a noi. A noi donne. E dobbiamo essere noi donne a prenderla, di volta in volta, di caso in caso, che a voi piaccia o meno.

Oriana Fallaci

{ 0 comments }

Come ti nascondo le informazioni in un JPEG

Osserviamo che ogni file .jpg, a un editor esadecimale, inizia con una sequenza FFD8 e termina con la sequenza FFD9

Il codice qui indicato “inietta” il messaggio “Hello World” in coda al file image.jpg senza però modificarne la qualità:

with open('image.jpg', 'ab') as f:
    f.write(b"Hello World")
    f.close()

Ecco come, all’editor esadecimale, appare adesso image.jpg:

Dopo la sequenza FFD9 è stata inserita, come si è evidenziato nell’immagine, un flusso binario che rappresenta, appunto, la stringa Hello World.

Se volessimo leggere il contenuto che abbiamo scritto in coda al file dopo la sequenza FFD9:

with open('image.jpg', 'rb') as f:
    content = f.read()
    offset = content.index(bytes.fromhex('FFD9'))

    f.seek(offset + 2)
    print(f.read())

    f.close()

{ 0 comments }

Sic…

Così ero solito paragonare cose grandi a cose piccole.

Virgilio, Bucoliche, Ecloga prima, v 23

{ 0 comments }

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 }