Skip to content

Commit

Permalink
initial executable built
Browse files Browse the repository at this point in the history
  • Loading branch information
Qile0317 committed Apr 15, 2023
1 parent a235072 commit 2411cd5
Show file tree
Hide file tree
Showing 7 changed files with 136 additions and 134 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
__pycache__
main.spec
*.spec
build
dist
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@
[![Build Status](https://github.com/Qile0317/SimplePdfMerger/actions/workflows/CI.yml/badge.svg?branch=main)]
[![MIT license](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/Qile0317/SimplePdfMerger/LICENSE.md)

A simple pdf merging windows desktop application written with tkinter. The executable file should be in the main directory in the near future
A simple pdf merging windows desktop application written with tkinter. The windowsw executable file is `SimplePdfMerger.exe` and can also be found in the release.

Developer's note: The `main_gui.py` script in `SimplePdfMerger` should ideally be split up but there were difficulties with the import system when using `pyinstaller`
Binary file added SimplePdfMerger.exe
Binary file not shown.
122 changes: 0 additions & 122 deletions SimplePdfMerger/doublinklist.py

This file was deleted.

134 changes: 131 additions & 3 deletions SimplePdfMerger/main_gui.py → SimplePdfMerger/main_gui.pyw
Original file line number Diff line number Diff line change
@@ -1,9 +1,133 @@
import tkinter as tk
from tkinter import filedialog, messagebox
from screeninfo import get_monitors
from SimplePdfMerger.doublinklist import *
#from doublinklist import *
from pypdf import PdfWriter

#the doubly linked list code is repeated here because python modules are an absolute nightmare:
class DoublyLinkedList:
class Node:
def __init__(self, data=None):
self.data = data
self.prev = None
self.next = None

def __repr__(self):
return f"Node({self.data})"

def __init__(self):
self.head = None
self.tail = None
self.length = 0
self.node_dict = {}

def __len__(self):
return self.length

def __iter__(self):
node = self.head
while node is not None:
yield node.data
node = node.next

def __repr__(self):
if len(self) == 0:
return "Empty DoublyLinkedList"

current = self.head
linked_list_str = f"DoublyLinkedList of length {self.length}:\n "
while current is not None:
linked_list_str += f"{current.data}"
if current.next is not None:
linked_list_str += " <-> "
current = current.next
return linked_list_str

def _find_node(self, data):
if data in self.node_dict:
return self.node_dict[data]
return None

def append(self, data):
new_node = self.Node(data)
if self.length == 0:
self.head = new_node
self.tail = new_node
else:
new_node.prev = self.tail
self.tail.next = new_node
self.tail = new_node
self.node_dict[data] = new_node
self.length += 1

def prepend(self, data):
new_node = self.Node(data)
if self.length == 0:
self.head = new_node
self.tail = new_node
else:
new_node.next = self.head
self.head.prev = new_node
self.head = new_node
self.node_dict[data] = new_node
self.length += 1

def insert_after(self, prev_node_data, data):
new_node = self.Node(data)
prev_node = self._find_node(prev_node_data)
if prev_node is None:
raise ValueError(f"Node with data '{prev_node_data}' not found.")
if prev_node is self.tail:
self.tail = new_node
new_node.next = prev_node.next
new_node.prev = prev_node
if prev_node.next is not None:
prev_node.next.prev = new_node
prev_node.next = new_node
self.node_dict[data] = new_node
self.length += 1

def insert_before(self, next_node_data, data):
new_node = self.Node(data)
next_node = self._find_node(next_node_data)
if next_node is None:
raise ValueError(f"Node with data '{next_node_data}' not found.")
if next_node is self.head:
self.head = new_node
new_node.prev = next_node.prev
new_node.next = next_node
if next_node.prev is not None:
next_node.prev.next = new_node
next_node.prev = new_node
self.node_dict[data] = new_node
self.length += 1

def remove(self, data):
node = self._find_node(data)
if node is None:
raise ValueError(f"Node with data '{data}' not found.")
if node is self.head:
self.head = node.next
if node is self.tail:
self.tail = node.prev
if node.prev is not None:
node.prev.next = node.next
if node.next is not None:
node.next.prev = node.prev
del self.node_dict[data]
self.length -= 1

def append_vector(self, vec):
for element in vec:
self.append(element)
self.node_dict[element] = self._find_node(element)

def clear(self):
self.head = None
self.tail = None
self.length = 0
self.node_dict = {}

class main_gui:
def __init__(self):
self.pdf_list = DoublyLinkedList()
Expand All @@ -21,7 +145,7 @@ def __init__(self):

def create_window_skeleton(self):
self.root.title("PDF Appender")
self.root.iconphoto(False, tk.PhotoImage(file = "pdf_merger_logo.png"))
#self.root.iconphoto(False, tk.PhotoImage(file = "pdf_merger_logo.png"))
self.root.configure(bg = self.background_color)

main_monitor = get_monitors()[0]
Expand Down Expand Up @@ -175,4 +299,8 @@ def add_separator_line(self):

def insert_button(self, text, command):
self.create_button(text, command)
self.add_separator_line()
self.add_separator_line()

if __name__ == '__main__':
app = main_gui()
app.run()
6 changes: 0 additions & 6 deletions main.pyw

This file was deleted.

2 changes: 1 addition & 1 deletion tests/test_doublylinkedlist.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import pytest
from SimplePdfMerger.doublinklist import *
from SimplePdfMerger.main_gui import *

def test_empty_list():
dll = DoublyLinkedList()
Expand Down

0 comments on commit 2411cd5

Please sign in to comment.