Screens Project

This is a group project to be done in a team of 2 to 4. If you know who you would like to work with, let me know by Wednesday, otherwise I will assign groups randomly.

Your team will build a Kivy app that uses multiple screens. A Screen is a Layout that is managed by a ScreenManager which can manage multiple Screen instances. You can define transitions between screens so that you can switch from one screen to another.

Initially you will brainstorm and plan a design for your app, then team members will work on screens individually, and then you will combine your code.

Individually you will submit some writing talking about the process and the portions of the project that you were responsible for.

The App

The requirements for your app are as follows:

The most obvious type of application that uses multiple screens like this is an app where there is a settings screen and the other screens behave in different ways depending on the settings.

You may want to start your brainstorming by looking at examples of different widgets that are available.

Here is the documentation for Kivy’s ScreenManager:

https://kivy.org/docs/api-kivy.uix.screenmanager.html

You are required to have data that is shared among screens, but during development you do not need to utilize the shared data right away so that everyone in the team can start coding. For example, say you are creating a “to-do list” app with 3 team members. You might divide the app into 3 screens: one screen which shows the list items, one screen for adding new items, and a third screen for settings. The settings screen might allow for setting font colors and font size, but the person writing the screen which shows the list items can use the default font size and color until the settings screen is done. The screen showing the list of items could also start by listing a hard-coded list of items until the screen that allows adding items is built.

Choose something relatively simple for your application! You will only have a week and a half to work on this project, so keep the scope small. Keep in mind the main purpose of this project is to see how the ScreenManager works and to get some experience collaborating through GitHub.

GitHub Repository

Your team must create a repository on GitHub in which you will work. Create the repository as a private repository under the class organization (https://github.com/cs230s19/). Whoever creates the repository must add the other team members to the repository with write access.

It would be a good idea to start your project by adding a .gitignore file to your project on GitHub. This is particularly helpful when using PyCharm because we can have Git ignore all of the PyCharm specific files, which are stored in the folder .idea. Here are the contents of an example .gitignore file that will cause Git to ignore the .idea folder, temporary files created by Python, and .DS_Store which is created by Finder on Macs:

.idea/
*.pyc
__pycache__
.DS_Store

You can create your .gitignore before anybody forks the repository by clicking the “Create new file” link at the top of the repository.

Git Workflow

All development should be done in personal forks of this repository. When you have code that should be marged into the main repository, create a pull request. Each pull request must be merged by someone on your team who did not create the pull request. Take this as an opportunity to review each other’s code before it is merged. Everyone on the team must merge at least one pull request, though it is likely that you will be creating enough pull requests that everyone will be able to merge multiple pull requests.

Try to use good Git commit messages!

When you clone your fork of the group’s repository, a remote will automatically created in your local repository that is named origin and has the URL of your fork. When the main repository for your group is updated, you will need to pull in those updates locally too, so you will need to add a remote for that.

In PyCharm, you can add the remote by going to VCS -> Git -> Remotes and adding the remote with the name main there. On the command line you can do this:

git remote add main <URL of main repository>

When you push, you always want to push to your fork. To pull in changes from the main repository in PyCharm, click on the branch name in the bottom right corner of the screen (it will say main if you are on the default branch), and under “Remote Branches” you should see main/main. If you click on that, you can merge it into the current branch.

On the command line, you can fetch and merge into the current branch using pull like this:

git pull main main

Demo

Each team will give a short demo to the class to show off their app and explain how it was implemented.

Submission

There is a Markdown file in the git-keeper assignment for this project. Write a few paragraphs in this file about what the process was like as a group, which parts of the project you were responsible for, and what the main challenges were.

Grading breakdown: