jkisolo.com

Creating Your First Desktop App with PySide6: A Data Scientist's Journey

Written on

Chapter 1: Introduction

Building my first desktop application using PySide6 was surprisingly straightforward. As a data scientist, the most challenging aspect of my job often involves persuading non-technical stakeholders about the value of new data science solutions. This has been my experience for over five years as a data scientist and machine learning engineer.

To bridge the gap between technical concepts and stakeholder understanding, I found that sharing regular progress updates in simple presentations and creating a machine learning web application at the project's end helped. However, I was inspired by a colleague who successfully built a desktop application in .NET for a different project, and it was well-received by our team.

This led me to ponder: why not develop a desktop application instead of a web-based one? The main hurdle was my lack of experience with .NET and desktop app development. Fortunately, I discovered PySide6.

Section 1.1: What is PySide6?

PySide6 is a Python library that enables the creation of GUI applications. It serves as a wrapper around Qt6, a powerful UI framework. With PySide6, you can develop fully functional applications compatible with Windows, Mac, Linux, and even mobile platforms.

To get started with PySide6, it's crucial to set up a virtual environment for the necessary library installations. Ensure you have Python installed and execute the following commands in your terminal:

python -m venv env

source env/bin/activate

pip install pyside6

Once installed, you can verify the PySide6 version to confirm everything is set up correctly.

Section 1.2: The "Hello World" Application

Remember the excitement of writing your first lines of code? I felt that thrill again when creating a simple "Hello World" application with PySide6. Here’s how to do it:

Create a file named hello-world.py and add the following code:

import sys

from PySide6.QtWidgets import QApplication, QLabel

app = QApplication(sys.argv)

label = QLabel("Hello World")

label.show()

sys.exit(app.exec())

Run the application using:

python hello-world.py

You should see a simple window displaying "Hello World."

Chapter 2: Building Your First Desktop Application

Next, I aimed to create a desktop application that offers insights into Valentine's Day consumer spending. All relevant codes and datasets for this project are available in a GitHub repository for easy access.

Section 2.1: Selecting a Dataset

The National Retail Federation has conducted surveys on Valentine's Day spending for over ten years. We’ll utilize their data, available on Kaggle under a Creative Commons Public Domain license. Here’s how to load the datasets:

import pandas as pd

import matplotlib.pyplot as plt

historical_spending = pd.read_csv('data/historical_spending.csv')

gifts_gender = pd.read_csv('data/gifts_gender.csv')

gifts_age = pd.read_csv('data/gifts_age.csv')

This dataset includes:

  • Historical Spending: Tracks spending percentages on various gift categories from 2010 to 2019.
  • Gifts by Gender: Compares spending habits of men and women on Valentine's Day.
  • Gifts by Age: Analyzes spending preferences across different age groups.

We can pose several interesting questions based on this data, such as:

  • How has average spending changed over the last decade?
  • What are the gender differences in gift preferences?
  • How do spending preferences vary across age groups?

Section 2.2: Creating Visualizations

To analyze Valentine's Day spending trends, I decided to create a series of visualizations. Using Matplotlib, I plotted a line graph to illustrate historical spending patterns:

palette = plt.get_cmap('Set1')

for column in historical_spending.drop(['Year', 'PercentCelebrating'], axis=1):

plt.plot(historical_spending['Year'], historical_spending[column], color=palette(num), linewidth=2.5, label=column)

plt.title("Historical Spending Trends on Valentine's Day (2010-2019)")

plt.xlabel("Year")

plt.ylabel("Spending ($)")

plt.xticks(historical_spending['Year'])

plt.legend()

plt.show()

The visualization revealed significant trends, such as a spike in spending from 2017 to 2020.

Section 2.3: Wrapping Visualizations in a Desktop App

Having created visualizations, I wanted to integrate them into a user-friendly desktop application. Here’s a snippet of how the code looks:

from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

class MplCanvas(FigureCanvas):

def __init__(self):

self.fig = Figure()

super().__init__(self.fig)

self.load_data()

def load_data(self):

self.historical_spending = pd.read_csv('data/historical_spending.csv')

self.gifts_gender = pd.read_csv('data/gifts_gender.csv')

self.gifts_age = pd.read_csv('data/gifts_age.csv')

def plot_historical_spending(self):

# Plotting logic goes here

pass

class MainWindow(QMainWindow):

def __init__(self):

super().__init__()

self.canvas = MplCanvas()

# Create buttons and layout

pass

if __name__ == '__main__':

app = QApplication(sys.argv)

mainWin = MainWindow()

mainWin.show()

sys.exit(app.exec())

With this setup, users can interact with the application to visualize different data insights.

Conclusion: Next Steps

This project has sparked my interest in further enhancing the application, possibly by incorporating machine learning features. If you're keen on following this journey, connect with me on Medium or LinkedIn for updates!

Feel free to explore additional resources, such as the official PySide6 documentation or Python GUI development tutorials on freeCodeCamp. With determination, you can achieve a lot in a short time!

I'm excited to see what you create, so please share your projects in the comments below!

Preview image of a PySide6 application interface

Share the page:

Twitter Facebook Reddit LinkIn

-----------------------

Recent Post:

# Discover the Benefits of Mother-In-Law’s Tongue Plant

Explore the advantages of the snake plant, also known as Mother-in-Law's Tongue, and learn why it's a favorite among houseplant enthusiasts.

Stay Motivated: The Importance of Exercising with a Partner

Discover why exercising alone can be risky and how a workout partner can enhance motivation, accountability, and safety.

Authentic Reflections: Revealing the Truth Beyond Social Media

Exploring the hidden struggles behind the curated images we share online.