GarageCalc1/src/main.py

839 lines
32 KiB
Python

#!/usr/bin/env python3
"""
project: GarageCalc1
file: main.py
summary: Calculates available size of a garage space
license: GPL
author: Paul Salajean (p.salajean[at]gmx.de)
"""
# Standard library imports
import sys
import os
import csv
import configparser
# Third party imports
from PySide2.QtWidgets import QApplication, QMainWindow, QTableWidgetItem, QStatusBar, QFileDialog, \
QAbstractItemView, QMenu, QMessageBox, QHBoxLayout, QVBoxLayout, QAction, QActionGroup
from PySide2.QtGui import QIcon
from PySide2.QtCore import QFile, QSize, Qt, QCoreApplication, QTranslator
from PySide2.QtUiTools import QUiLoader
import xlsxwriter
# Local imports
from utils import show_about, resource_path
# my own classes imports
from clsTableWidget import TableWidget
# Local globals
APP_VERSION = "v0.4.1"
DIR_APPDATA = os.getenv('LOCALAPPDATA')
APP_NAME = "Garage Space Calculator"
APP_DISPNAME = "GarageCalc"
APP_AUTHOR = "Paul Salajean"
APP_DESCR = "Calculates available garage space"
APP_COPYRIGHT = "(c) Paul Salajean 2021"
APP_WEBSITE = "https://gitlab.com/ProfP303"
APP_DESKTOPFILENAME = APP_DISPNAME
APP_ICON = "./img/icons8-garage-32.ico"
ICON_NEW = "./img/icons8-new-file-32.png"
ICON_OPEN = "./img/icons8-opened-folder-32.png"
ICON_SAVE = "./img/icons8-save-32.png"
ICON_EXPORT = "./img/icons8-export-xls-32.png"
ICON_ABOUT = "./img/icons8-information-32.png"
ICON_QUIT = "./img/system-shutdown.png"
UI_MAIN = "./ui/main.ui"
COL_STUFF = 0
COL_LENGTH = 1
COL_WIDTH = 2
COL_HEIGHT = 3
COL_WEIGHT = 4
DEFAULT_GARAGE_LENGTH = "6"
DEFAULT_GARAGE_WIDTH = "2.5"
DEFAULT_GARAGE_HEIGHT = "2.5"
TBL_STUFF_COL_COUNT = 5
TBL_STUFF_ROW_COUNT = 50
TXT_UNSAVED_CHANGES = QCoreApplication.translate("main", "There are unsaved entries. Without saving, all changes are lost. Continue anyway?")
####################################################################
def main():
qApp = QApplication(sys.argv)
qApp.setApplicationName(APP_NAME)
qApp.setApplicationDisplayName(APP_DISPNAME)
qApp.setApplicationVersion(APP_VERSION)
qApp.description = APP_DESCR
qApp.copyright = APP_COPYRIGHT
qApp.website = APP_WEBSITE
qApp.setWindowIcon(QIcon(APP_ICON))
qApp.setDesktopFileName(APP_DESKTOPFILENAME)
config = configparser.ConfigParser()
language = "Deutsch"
if os.path.exists(os.path.join(DIR_APPDATA, APP_DISPNAME, APP_DISPNAME + '.ini')):
config.read(os.path.join(DIR_APPDATA, APP_DISPNAME, APP_DISPNAME + '.ini'))
language = config['DEFAULT']['language']
else:
config['DEFAULT']['language'] = language
if not os.path.exists(os.path.join(DIR_APPDATA, APP_DISPNAME)):
os.makedirs(os.path.join(DIR_APPDATA, APP_DISPNAME))
with open(os.path.join(DIR_APPDATA, APP_DISPNAME, APP_DISPNAME + '.ini'), 'w') as configfile: # save
config.write(configfile)
translator = QTranslator()
print("Current dir:", os.getcwd())
if language == "Deutsch":
print("Loading german language file.")
translator.load(resource_path('./i18n/de_DE'))
elif language == "Magyar":
print("Loading hungarian langauge file.")
translator.load(resource_path('./i18n/hu_HU'))
else:
print(f"Unknown language setting '{language}' -> defaulting to english language.")
qApp.installTranslator(translator)
winMain = MainWindow(language)
if qApp.primaryScreen().size().width() <= 700:
winMain.showMaximized()
else:
winMain.resize(610, 640)
winMain.show()
sys.exit(qApp.exec_())
####################################################################
####################################################################
class MainWindow(QMainWindow):
def __init__(self, language):
super().__init__()
self.language = language
self.is_modified = False
self.opened_file = None
self.remembered_row = None
self.load_ui()
self.init_ui()
self.set_defaults()
self.create_menu(self.language)
self.connect_signals()
self.create_actions()
self.create_toolbar()
self.create_statusbar()
global APP_NAME
APP_NAME = qApp.setApplicationName(qApp.translate("main", "Garage Space Calculator"))
self.statusBar.showMessage(f"{APP_NAME} {APP_VERSION} - {APP_AUTHOR}", 5000)
self.calc_voluminae()
self.ui.efWeight.setText(str("0"))
self.retranslateUi()
self.ui.tableStuff.setFocus()
def create_menu(self, language=None):
menuMain = self.menuBar()
self.menuSettings = menuMain.addMenu(QCoreApplication.translate("main", "&Settings"))
self.menuLanguage = self.menuSettings.addMenu(QCoreApplication.translate("main", "Language"))
ag = QActionGroup(self, exclusive=True)
a = ag.addAction(QAction('English', self.menuSettings, checkable=True))
self.menuLanguage.addAction(a)
a = ag.addAction(QAction('Deutsch', self.menuSettings, checkable=True))
self.menuLanguage.addAction(a)
a = ag.addAction(QAction('Magyar', self.menuSettings, checkable=True))
self.menuLanguage.addAction(a)
menuMain.triggered.connect(lambda: self.store_selected_language(self.menuLanguage))
if language:
[action.setChecked(True) for action in self.menuLanguage.actions() if action.text()==language]
def retranslateUi(self):
# menus
self.menuSettings.setTitle(QCoreApplication.translate("main", "&Settings"))
self.menuLanguage.setTitle(QCoreApplication.translate("main", "Language"))
# tables
self.ui.tableGarage.setVerticalHeaderLabels([QCoreApplication.translate("main","Garage")])
self.ui.tableGarage.setHorizontalHeaderLabels([
QCoreApplication.translate("main","Length") + " [m]",
QCoreApplication.translate("main","Width") + " [m]",
QCoreApplication.translate("main","Height") + " [m]"
])
self.ui.tableStuff.setHorizontalHeaderLabels([QCoreApplication.translate("main","Stuff"),
QCoreApplication.translate("main","Length") + " [m]",
QCoreApplication.translate("main","Width") + " [m]",
QCoreApplication.translate("main","Height") + " [m]",
QCoreApplication.translate("main","Weight") + " [m]"])
# labels
self.ui.gbGarage.setTitle(QCoreApplication.translate("main","Dimension of the garage"))
self.ui.gbStuff.setTitle(QCoreApplication.translate("main", "Dimensions of the objects to be stored"))
self.ui.gbResults.setTitle(QCoreApplication.translate("main", "Result"))
self.ui.lblVol_Garage.setText(QCoreApplication.translate("main","Volume of the garage") + ":")
self.ui.lblVol_Stuff.setText(QCoreApplication.translate("main","Volume of the items") + ":")
self.ui.lblVol_Free.setText(QCoreApplication.translate("main","Free space in the garage") + ":")
self.ui.lblWeight.setText(QCoreApplication.translate("main","Total weight") + ":")
# Tooltips
self.actionNew.setToolTip(QCoreApplication.translate("main","New (Ctrl+N)"))
self.actionOpen.setToolTip(QCoreApplication.translate("main","Open... (Ctrl+O)"))
self.actionSave.setToolTip(QCoreApplication.translate("main","Save (Ctrl+S)"))
self.actionExport.setToolTip(QCoreApplication.translate("main","Export to EXCEL..."))
self.actionAbout.setToolTip(QCoreApplication.translate("main","Information about the application"))
self.actionQuit.setToolTip(QCoreApplication.translate("main","Quit the application (Strg+Q)"))
def load_ui(self):
loader = QUiLoader()
path = os.path.join(os.path.dirname(__file__), resource_path(UI_MAIN))
ui_file = QFile(path)
ui_file.open(QFile.ReadOnly)
self.ui = loader.load(ui_file, self)
ui_file.close()
# implement custom class 'TableWidget'
layoutGb = self.ui.gbStuff.layout()
self.ui.tableStuff = TableWidget()
self.ui.tableStuff.setColumnCount(TBL_STUFF_COL_COUNT)
self.ui.tableStuff.setRowCount(TBL_STUFF_ROW_COUNT)
layoutGb.addWidget(self.ui.tableStuff)
def create_actions(self):
self.actionNew = QAction()
self.actionNew.setIcon(QIcon(resource_path(ICON_NEW)))
self.actionNew.triggered.connect(self.file_new)
self.actionNew.setShortcut("Ctrl+N")
self.actionOpen = QAction()
self.actionOpen.setIcon(QIcon(resource_path(ICON_OPEN)))
self.actionOpen.triggered.connect(self.file_open)
self.actionOpen.setShortcut("Ctrl+O")
self.actionSave = QAction()
self.actionSave.setIcon(QIcon(resource_path(ICON_SAVE)))
self.actionSave.triggered.connect(self.file_save)
self.actionSave.setShortcut("Ctrl+S")
self.actionExport = QAction()
self.actionExport.setIcon(QIcon(resource_path(ICON_EXPORT)))
self.actionExport.triggered.connect(self.file_export)
self.actionAbout = QAction()
self.actionAbout.setIcon(QIcon(resource_path(ICON_ABOUT)))
self.actionAbout.triggered.connect(show_about)
self.actionQuit = QAction()
self.actionQuit.setIcon(QIcon(resource_path(ICON_QUIT)))
self.actionQuit.triggered.connect(self.app_quit)
self.actionQuit.setShortcut("Ctrl+Q")
def create_toolbar(self):
# Main Toolbar (for all pages/views)
self.toolbar = self.addToolBar('Main Toolbar')
self.toolbar.setIconSize(QSize(32, 32))
self.toolbar.addAction(self.actionNew)
self.toolbar.addAction(self.actionOpen)
self.toolbar.addAction(self.actionSave)
self.toolbar.addSeparator()
self.toolbar.addAction(self.actionExport)
self.toolbar.addSeparator()
self.toolbar.addAction(self.actionAbout)
self.toolbar.addSeparator()
self.toolbar.addAction(self.actionQuit)
def set_defaults(self):
tblGarage = self.ui.tableGarage
tblStuff = self.ui.tableStuff
tblGarage.setItem(0, 0, QTableWidgetItem(DEFAULT_GARAGE_LENGTH))
tblGarage.setItem(0, 1, QTableWidgetItem(DEFAULT_GARAGE_WIDTH))
tblGarage.setItem(0, 2, QTableWidgetItem(DEFAULT_GARAGE_HEIGHT))
tblStuff.setRowCount(TBL_STUFF_ROW_COUNT)
self.is_modified = False
def create_statusbar(self):
self.statusBar = QStatusBar()
self.setStatusBar(self.statusBar)
def connect_signals(self):
tblGarage = self.ui.tableGarage
tblStuff = self.ui.tableStuff
tblGarage.itemChanged.connect(self.on_garage_changed)
tblStuff.itemChanged.connect(self.on_stuff_changed)
def init_ui(self):
tblGarage = self.ui.tableGarage
tblStuff = self.ui.tableStuff
# clear garage
tblGarage.setRowCount(1)
# clear stuff
# tblStuff.clear()
tblStuff.setRowCount(0)
tblStuff.setRowCount(TBL_STUFF_ROW_COUNT)
# clear results
self.ui.efVol_Garage.clear()
self.ui.efVol_Stuff.clear()
self.ui.efVol_Free.clear()
self.ui.efWeight.clear()
self.opened_file = None
if self.opened_file:
self.setWindowTitle(self.opened_file)
else:
self.setWindowTitle(f"{APP_NAME} {APP_VERSION} by {APP_AUTHOR}")
self.ui.efVol_Free.setStyleSheet("")
self.is_modified = False
def app_quit(self):
if self.is_modified:
msg = QCoreApplication.translate("main", TXT_UNSAVED_CHANGES)
reply = QMessageBox.question(self, QCoreApplication.translate("main", "Quit"), msg, \
QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
if reply == QMessageBox.No:
return False
QApplication.quit()
def file_new(self):
if self.is_modified:
msg = QCoreApplication.translate("main", TXT_UNSAVED_CHANGES)
reply = QMessageBox.question(self, QCoreApplication.translate("main", "New"), msg, \
QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
if reply == QMessageBox.No:
return False
self.init_ui()
def file_save(self):
tblGarage = self.ui.tableGarage
tblStuff = self.ui.tableStuff
is_file_saved = False
fileName = self.opened_file
if not self.opened_file: # if not file already open
options = QFileDialog.Options()
txt_title = QCoreApplication.translate("main", "Save")
txt_file = QCoreApplication.translate("main", "CSV-file")
txt_all_files = QCoreApplication.translate("main", "All files")
fileName, _ = QFileDialog.getSaveFileName(None, txt_title, None,
txt_file + " (*.csv);;" + txt_all_files + " (*)",
options=options)
if fileName: # if not file already open
with open(fileName, mode='w', newline='') as garagecalc_file:
writer = csv.writer(garagecalc_file, delimiter=';', quotechar='"', quoting=csv.QUOTE_MINIMAL)
garage_length = 0
garage_width = 0
garage_height = 0
item_length = tblGarage.item(0, 0)
item_width = tblGarage.item(0, 1)
item_height = tblGarage.item(0, 2)
# loop over table Garage
for row in range(tblGarage.rowCount()):
# get garage length
if item_length:
garage_length = item_length.text()
try:
garage_length = float(garage_length)
except ValueError:
garage_length = 0.0
# get garage width
if item_width:
garage_width = item_width.text()
try:
garage_width = float(garage_width)
except ValueError:
garage_width = 0.0
# get garage height
if item_height:
garage_height = item_height.text()
try:
garage_height = float(garage_height)
except ValueError:
garage_height = 0.0
if garage_length or garage_width or garage_height:
writer.writerow([QCoreApplication.translate("main","Garage"), garage_length, garage_width, garage_height])
# loop over table Stuff
for row in range(tblStuff.rowCount()):
stuff_text = None
length = None
width = None
height = None
weight = None
item_stuff = tblStuff.item(row, COL_STUFF)
item_length = tblStuff.item(row, COL_LENGTH)
item_width = tblStuff.item(row, COL_WIDTH)
item_height = tblStuff.item(row, COL_HEIGHT)
item_weight = tblStuff.item(row, COL_WEIGHT)
if item_stuff:
stuff_text = item_stuff.text()
if item_length:
try:
length = float(item_length.text())
except ValueError:
length = None
if item_width:
try:
width = float(item_width.text())
except ValueError:
width = None
if item_height:
try:
height = float(item_height.text())
except ValueError:
height = None
if item_weight:
try:
weight = float(item_weight.text())
except ValueError:
weight = None
if item_stuff or item_length or item_width or item_height or item_weight:
writer.writerow([stuff_text, length, width, height, weight])
is_file_saved = True
self.opened_file = os.path.basename(fileName)
self.setWindowTitle(self.opened_file)
self.is_modified = False
if is_file_saved:
msg = QCoreApplication.translate("main", "file") + " '" + fileName + "' " + QCoreApplication.translate("main", "saved")
self.statusBar.showMessage(msg, 2000)
def file_open(self):
if self.is_modified:
msg = QCoreApplication.translate("main", TXT_UNSAVED_CHANGES)
reply = QMessageBox.question(self, QCoreApplication.translate("main", "Open"), msg, \
QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
if reply == QMessageBox.No:
return False
tblGarage = self.ui.tableGarage
tblStuff = self.ui.tableStuff
options = QFileDialog.Options()
txt_title = QCoreApplication.translate("main", "Open")
txt_file = QCoreApplication.translate("main", "CSV-file")
txt_all_files = QCoreApplication.translate("main", "All files")
fileName, _ = QFileDialog.getOpenFileName(self, txt_title, None,
txt_file + " (*.csv);;" + txt_all_files + " (*)",
options=options)
if fileName:
self.init_ui()
file = open(fileName, "r", newline='')
reader = csv.reader(file, delimiter=';')
row_idx = 0
for row in reader:
if row_idx == 0: # first row (index=0) ist always garage dimension
try:
garage_length = row[1]
garage_width = row[2]
garage_height = row[3]
tblGarage.setItem(0, COL_LENGTH-1, QTableWidgetItem(str(garage_length)))
tblGarage.setItem(0, COL_WIDTH-1, QTableWidgetItem(str(garage_width)))
tblGarage.setItem(0, COL_HEIGHT-1, QTableWidgetItem(str(garage_height)))
except IndexError as ex:
pass
if row_idx > 0:
try:
stuff = row[0]
stuff_length = row[1]
stuff_width = row[2]
stuff_height = row[3]
stuff_weight = row[4]
tblStuff.setItem(row_idx - 1, COL_STUFF, QTableWidgetItem(stuff))
tblStuff.setItem(row_idx - 1, COL_LENGTH, QTableWidgetItem(str(stuff_length)))
tblStuff.setItem(row_idx - 1, COL_WIDTH, QTableWidgetItem(str(stuff_width)))
tblStuff.setItem(row_idx - 1, COL_HEIGHT, QTableWidgetItem(str(stuff_height)))
tblStuff.setItem(row_idx - 1, COL_WEIGHT, QTableWidgetItem(str(stuff_weight)))
except IndexError as ex:
pass
row_idx += 1
tblStuff.setRowCount(TBL_STUFF_ROW_COUNT)
self.is_modified = False
self.opened_file = os.path.basename(fileName)
if fileName:
self.setWindowTitle(self.opened_file)
else:
self.setWindowTitle(f"{APP_NAME} {APP_VERSION} by {APP_AUTHOR}")
def file_export(self):
tblGarage = self.ui.tableGarage
tblStuff = self.ui.tableStuff
options = QFileDialog.Options()
txt_title = QCoreApplication.translate("main", "Export")
txt_file = QCoreApplication.translate("main", "EXCEL-file")
txt_all_files = QCoreApplication.translate("main", "All files")
file_name, _ = QFileDialog.getSaveFileName(None, txt_title, None, txt_file + " (*.xlsx);;" + txt_all_files + " (*)", options=options)
if file_name:
print(f"Exporting into file -> {file_name}")
workbook = xlsxwriter.Workbook(file_name)
worksheet = workbook.add_worksheet()
# write col header
start_row = 0
worksheet.write(start_row, 0, QCoreApplication.translate("main", "Dimension of the garage"))
start_row = 1
worksheet.write(start_row, COL_LENGTH, QCoreApplication.translate("main","Length") + " [m]")
worksheet.write(start_row, COL_WIDTH, QCoreApplication.translate("main","Width") + " [m]")
worksheet.write(start_row, COL_HEIGHT, QCoreApplication.translate("main","Height") + " [m]")
worksheet.set_column(0, 0, 25)
worksheet.set_column(1, 3, 10)
start_row = 2
# loop over table Garage
for row in range(tblGarage.rowCount()):
# get garage length
garage_length = tblGarage.item(0, 0).text()
try:
garage_length = float(garage_length)
except ValueError:
garage_length = 0.0
# get garage width
garage_width = tblGarage.item(0, 1).text()
try:
garage_width = float(garage_width)
except ValueError:
garage_width = 0.0
# get garage height
garage_height = tblGarage.item(0, 2).text()
try:
garage_height = float(garage_height)
except ValueError:
garage_height = 0.0
worksheet.write(start_row + row, COL_LENGTH, garage_length)
worksheet.write(start_row + row, COL_WIDTH, garage_width)
worksheet.write(start_row + row, COL_HEIGHT, garage_height)
start_row = 4
worksheet.write(start_row, 0, QCoreApplication.translate("main", "Dimensions of the objects to be stored"))
start_row = 5
worksheet.write(start_row, COL_LENGTH, QCoreApplication.translate("main","Length") + " [m]")
worksheet.write(start_row, COL_WIDTH, QCoreApplication.translate("main","Width") + " [m]")
worksheet.write(start_row, COL_HEIGHT, QCoreApplication.translate("main","Height") + " [m]")
worksheet.write(start_row, COL_WEIGHT, QCoreApplication.translate("main","Weight") + " [kg]")
start_row = 6
# loop over table Stuff
row_idx = start_row
for row in range(tblStuff.rowCount()):
item_stuff = tblStuff.item(row, COL_STUFF)
item_length = tblStuff.item(row, COL_LENGTH)
item_width = tblStuff.item(row, COL_WIDTH)
item_height = tblStuff.item(row, COL_HEIGHT)
item_weight = tblStuff.item(row, COL_WEIGHT)
if item_stuff:
stuff_text = item_stuff.text()
if len(stuff_text)>0:
worksheet.write(start_row + row, COL_STUFF, stuff_text)
if item_length:
try:
length = float(item_length.text())
if length:
worksheet.write(start_row + row, COL_LENGTH, length)
except ValueError:
pass
if item_width:
try:
width = float(item_width.text())
if width:
worksheet.write(start_row + row, COL_WIDTH, width)
except ValueError:
pass
if item_height:
try:
height = float(item_height.text())
if height:
worksheet.write(start_row + row, COL_HEIGHT, height)
except ValueError:
pass
if item_weight:
try:
weight = float(item_weight.text())
if weight:
worksheet.write(start_row + row, COL_WEIGHT, weight)
except ValueError:
pass
if item_stuff or item_length or item_width or item_height or item_weight:
row_idx += 1
row_idx += 1
# loop over Results
worksheet.write(row_idx, 0, QCoreApplication.translate("main","Result"))
row_idx += 1
worksheet.write(row_idx, 0, QCoreApplication.translate("main","Volume of the garage") + ":")
worksheet.write(row_idx, 1, float(self.ui.efVol_Garage.text()))
row_idx += 1
worksheet.write(row_idx, 0, QCoreApplication.translate("main","Volume of the items") + ":")
worksheet.write(row_idx, 1, float(self.ui.efVol_Stuff.text()))
row_idx += 1
worksheet.write(row_idx, 0, QCoreApplication.translate("main","Free space in the garage") + ":")
worksheet.write(row_idx, 1, float(self.ui.efVol_Free.text()))
row_idx += 1
worksheet.write(row_idx, 0, QCoreApplication.translate("main", "Total weight") + ":")
worksheet.write(row_idx, 1, float(self.ui.efWeight.text()))
workbook.close()
msg = QCoreApplication.translate("main", "Successfully exported to EXCEL") + " :-)"
self.statusBar.showMessage(msg, 5000)
def on_garage_changed(self):
self.is_modified = True
self.calc_voluminae()
def on_stuff_changed(self):
self.is_modified = True
self.calc_voluminae()
self.calc_weight()
def get_garage_vol(self):
tblGarage = self.ui.tableGarage
is_error = False
garage_length = 0
garage_width = 0
garage_height = 0
# get garage length
if tblGarage.item(0, 0):
garage_length = tblGarage.item(0, 0).text()
if garage_length:
try:
garage_length = float(garage_length)
except ValueError:
garage_length = 0.0
is_error = True
# get garage width
if tblGarage.item(0, 1):
garage_width = tblGarage.item(0, 1).text()
if garage_width:
try:
garage_width = float(garage_width)
except ValueError:
garage_width = 0.0
is_error = True
# get garage height
if tblGarage.item(0, 2):
garage_height = tblGarage.item(0, 2).text()
if garage_height:
try:
garage_height = float(garage_height)
except ValueError:
garage_height = 0.0
is_error = True
if not is_error:
garage_vol = round(float(garage_length) * float(garage_width) * float(garage_height), 2)
else:
msg = QCoreApplication.translate("main", "Error in the garage dimension") + " :-("
self.statusBar.showMessage(msg, 5000)
return garage_vol
def get_stuff_vol(self):
tblStuff = self.ui.tableStuff
stuff_vol = 0
length = 0
width = 0
height = 0
# get number of rows
row_count = tblStuff.rowCount()
is_error = False
# get stuff voluminae
for row in range(row_count):
vol = 0
length = 0
width = 0
height = 0
item_length = tblStuff.item(row, COL_LENGTH)
item_width = tblStuff.item(row, COL_WIDTH)
item_height = tblStuff.item(row, COL_HEIGHT)
if item_length:
try:
length = float(item_length.text())
except ValueError:
length = 0
is_error = True
if item_width:
try:
width = float(item_width.text())
except ValueError:
width = 0
is_error = True
if item_height:
try:
height = float(item_height.text())
except ValueError:
height = 0
is_error = True
vol = round(length * width * height, 2)
stuff_vol = stuff_vol + vol
if is_error:
# stuff_vol = 0.0
msg = QCoreApplication.translate("main", "Error in the dimensions of the objects to be stored") + " :-("
self.statusBar.showMessage(msg, 5000)
return stuff_vol
def calc_voluminae(self):
tblGarage = self.ui.tableGarage
# get garage vol
garage_vol = self.get_garage_vol()
# get stuff vol
stuff_vol = self.get_stuff_vol()
# display results
self.ui.efVol_Garage.setText(f"{garage_vol:2.2f}")
self.ui.efVol_Stuff.setText(f"{stuff_vol:2.2f}")
self.ui.efVol_Free.setText(f"{garage_vol - stuff_vol:2.2f}")
if ( garage_vol - stuff_vol ) < 0:
self.ui.efVol_Free.setStyleSheet("border: 1px solid red;")
else:
self.ui.efVol_Free.setStyleSheet("")
def calc_weight(self):
tblStuff = self.ui.tableStuff
weight_sum = 0
# get number of rows
row_count = tblStuff.rowCount()
for row in range(row_count):
weight = 0.0
item = tblStuff.item(row, COL_WEIGHT)
if item:
try:
weight = float(item.text())
except ValueError:
weight = 0.0
weight_sum = round(weight_sum + weight, 2)
self.ui.efWeight.setText(f"{weight_sum:2.2f}")
def store_selected_language(self, menu):
""" Stores selected menu labels to ini-file. """
# [print(action.text()) for action in menu.actions() if action.isChecked()]
print("Current dir:", os.getcwd())
language = "English"
for action in menu.actions():
if action.isChecked():
language = action.text()
config['DEFAULT']['language'] = language
if not os.path.exists(os.path.join(DIR_APPDATA, APP_DISPNAME)):
os.makedirs(os.path.join(DIR_APPDATA, APP_DISPNAME))
with open(os.path.join(DIR_APPDATA, APP_DISPNAME, APP_DISPNAME + '.ini'), 'w') as configfile: # save
config.write(configfile)
if language == "Deutsch":
print("Loading german language file.")
translator.load(resource_path('./i18n/de_DE'))
elif language == "Magyar":
print("Loading hungarian langauge file.")
translator.load(resource_path('./i18n/hu_HU'))
else:
#qApp.removeTranslator(translator)
translator.load("dummy")
print(f"Unknown language setting '{language}' -> defaulting to english language.")
self.retranslateUi()
####################################################################
if __name__ == "__main__":
main()