Skip to content

Commit aa82f93

Browse files
committed
feat: Сделал удаление категории и поменял интерфейс
1 parent fdef557 commit aa82f93

File tree

9 files changed

+313
-65
lines changed

9 files changed

+313
-65
lines changed

db.py

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,8 @@ def create_tables(self):
3939
)"""
4040
)
4141

42-
cursor.execute(
43-
"INSERT OR IGNORE INTO Categories (name) VALUES (?)", ("Все",)
44-
)
42+
cursor.execute("INSERT OR IGNORE INTO Categories (name) VALUES (?)",
43+
("Все",))
4544

4645
conn.commit()
4746
conn.close()
@@ -56,9 +55,8 @@ def check_name_is_unique(self, name):
5655
def check_path_is_unique(self, game_path):
5756
conn = self.get_connection()
5857
cursor = conn.cursor()
59-
cursor.execute(
60-
"SELECT COUNT(*) FROM Games WHERE path = ?", (game_path,)
61-
)
58+
cursor.execute("SELECT COUNT(*) FROM Games WHERE path = ?",
59+
(game_path,))
6260
count = cursor.fetchone()[0]
6361
return count == 0
6462

@@ -95,6 +93,42 @@ def insert_category(self, name):
9593
finally:
9694
conn.close()
9795

96+
def delete_category(self, category_id):
97+
conn = self.get_connection()
98+
cursor = conn.cursor()
99+
try:
100+
cursor.execute(
101+
"DELETE FROM Categories WHERE id = ?", (category_id,)
102+
)
103+
conn.commit()
104+
except Exception as e:
105+
print(f"Ошибка при удалении категории: {e}")
106+
finally:
107+
conn.close()
108+
109+
def get_games_by_category(self, category_id):
110+
conn = self.get_connection()
111+
cursor = conn.cursor()
112+
cursor.execute("SELECT * FROM Games WHERE category_id = ?",
113+
(category_id,))
114+
games = cursor.fetchall()
115+
conn.close()
116+
return games
117+
118+
def edit_games_category(self, category_id_old, category_id_new):
119+
conn = self.get_connection()
120+
cursor = conn.cursor()
121+
try:
122+
cursor.execute(
123+
"UPDATE Games SET category_id = ? WHERE category_id = ?",
124+
(category_id_new, category_id_old),
125+
)
126+
conn.commit()
127+
except Exception as e:
128+
print(f"Ошибка при изменении категории для игры: {str(e)}")
129+
finally:
130+
conn.close()
131+
98132
def get_categories(self):
99133
conn = self.get_connection()
100134
cursor = conn.cursor()
@@ -122,9 +156,8 @@ def get_category_id_by_name(self, name):
122156
def category_name_check_unique(self, name):
123157
conn = self.get_connection()
124158
cursor = conn.cursor()
125-
cursor.execute(
126-
"SELECT COUNT(*) FROM Categories WHERE name = ?", (name,)
127-
)
159+
cursor.execute("SELECT COUNT(*) FROM Categories WHERE name = ?",
160+
(name,))
128161
count = cursor.fetchone()[0]
129162
return count == 0
130163

dialogs.py

Lines changed: 64 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
from PyQt6.QtWidgets import QDialog, QFileDialog, QMessageBox
22

33
from db import database
4-
from ui.add_game_dialog_ui import Ui_Dialog as AddGameUI
5-
from ui.createCategory_ui import Ui_Dialog as AddCategoryUI
4+
from ui.add_game_dialog import Ui_Dialog as AddGameUI
5+
from ui.createCategory import Ui_Dialog as AddCategoryUI
6+
from ui.deleteCategory import Ui_Dialog as DeleteCategoryUI
67

78

89
class AddGameDialog(QDialog, AddGameUI):
@@ -38,8 +39,7 @@ def accept_dialog(self):
3839
game_name = self.game_name.text().strip()
3940
game_path = self.file_path.text().strip()
4041
category_id = database.get_category_id_by_name(
41-
self.comboBox.currentText()
42-
)
42+
self.comboBox.currentText())
4343

4444
if not game_name:
4545
QMessageBox.warning(self, "Ошибка", "Введите название игры")
@@ -53,15 +53,13 @@ def accept_dialog(self):
5353
category_id = 1
5454

5555
if not database.check_name_is_unique(game_name):
56-
QMessageBox.warning(
57-
self, "Ошибка", "Игра с таким именем уже существует"
58-
)
56+
QMessageBox.warning(self, "Ошибка",
57+
"Игра с таким именем уже существует")
5958
return
6059

6160
if not database.check_path_is_unique(game_path):
62-
QMessageBox.warning(
63-
self, "Ошибка", "Игра с таким путём уке существует"
64-
)
61+
QMessageBox.warning(self, "Ошибка",
62+
"Игра с таким путём уке существует")
6563
return
6664

6765
try:
@@ -70,9 +68,8 @@ def accept_dialog(self):
7068
QMessageBox.information(self, "Успех", "Игра добавлена!")
7169

7270
except Exception as e:
73-
QMessageBox.critical(
74-
self, "Ошибка", f"Не удалось добавить игру: {str(e)}"
75-
)
71+
QMessageBox.critical(self, "Ошибка",
72+
f"Не удалось добавить игру: {str(e)}")
7673

7774

7875
class AddCategoryDialog(QDialog, AddCategoryUI):
@@ -91,25 +88,70 @@ def __init__(self):
9188
def accept_dialog(self):
9289
category_name = self.lineEdit.text().strip()
9390
if not category_name:
94-
QMessageBox.warning(
95-
self, "Ошибка", "Категория не может быть пустой"
96-
)
91+
QMessageBox.warning(self, "Ошибка",
92+
"Категория не может быть пустой")
9793
return
9894

9995
if not database.category_name_check_unique(category_name):
100-
QMessageBox.warning(
101-
self, "Ошибка", "Категория с таким именем уже есть"
102-
)
96+
QMessageBox.warning(self, "Ошибка",
97+
"Категория с таким именем уже есть")
10398
return
10499

105100
try:
106101
database.insert_category(category_name)
107102
self.accept()
108-
QMessageBox.information(
109-
self, "Успех", "Категория успешно добавлена"
110-
)
103+
QMessageBox.information(self, "Успех",
104+
"Категория успешно добавлена")
111105

112106
except Exception as e:
113107
QMessageBox.critical(
114108
self, "Ошибка", f"Не удалось добавить категорию: {str(e)}"
115109
)
110+
111+
112+
class DeleteCategoryDialog(QDialog, DeleteCategoryUI):
113+
def __init__(self):
114+
super().__init__()
115+
self.setFixedSize(300, 110)
116+
117+
self.setupUi(self)
118+
119+
self.get_categories()
120+
121+
self.buttonBox.accepted.disconnect()
122+
self.buttonBox.rejected.disconnect()
123+
124+
self.buttonBox.accepted.connect(self.accept_dialog)
125+
self.buttonBox.rejected.connect(self.reject)
126+
127+
def get_categories(self):
128+
combobox = self.comboBox
129+
categories = database.get_categories()
130+
for category in categories:
131+
combobox.addItem(category[0])
132+
133+
def accept_dialog(self):
134+
category_name = self.comboBox.currentText()
135+
if category_name == "Все":
136+
QMessageBox.warning(self, "Ошибка",
137+
"Данную категорию удалить нельзя!")
138+
return
139+
if not category_name:
140+
QMessageBox.warning(self, "Ошибка",
141+
"Категория не может быть пустой")
142+
return
143+
144+
try:
145+
database.edit_games_category(
146+
database.get_category_id_by_name(category_name), 1)
147+
148+
database.delete_category(
149+
database.get_category_id_by_name(category_name))
150+
self.accept()
151+
QMessageBox.information(self, "Успех",
152+
"Категория успешно удалена")
153+
154+
except Exception as e:
155+
QMessageBox.critical(
156+
self, "Ошибка", f"Не удалось удалить категорию: {str(e)}"
157+
)

main.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import dialogs
88
from db import database
9-
from ui.mainWindow_ui import Ui_MainWindow
9+
from ui.mainWindow import Ui_MainWindow
1010
from utils import txt_editor, json_editor
1111

1212

@@ -43,7 +43,9 @@ def __init__(self):
4343
self.action_2.triggered.connect(lambda: self.set_theme("light"))
4444
self.action_3.triggered.connect(lambda: self.set_theme("dark"))
4545
self.create_category.triggered.connect(
46-
lambda: self.open_dialog("add_category")
46+
lambda: self.open_dialog("add_category"))
47+
self.delete_category.triggered.connect(
48+
lambda: self.open_dialog("delete_category")
4749
)
4850

4951
def set_theme(self, theme):
@@ -98,6 +100,10 @@ def open_dialog(self, dialog):
98100
_dialog = dialogs.AddCategoryDialog()
99101
_dialog.exec()
100102
self.update_menu_bar()
103+
if dialog == "delete_category":
104+
_dialog = dialogs.DeleteCategoryDialog()
105+
_dialog.exec()
106+
self.update_menu_bar()
101107

102108
def update_menu_bar(self):
103109
menu = self.menu_3
@@ -110,15 +116,16 @@ def update_menu_bar(self):
110116
break
111117

112118
if separator_index != -1:
113-
for action in actions[separator_index + 1 :]:
119+
for action in actions[separator_index + 1:]:
114120
menu.removeAction(action)
115121

116122
categories = database.get_categories()
117123
for category in categories:
118124
category_name = category[0]
119125
action = QAction(category_name, self)
120126
action.triggered.connect(
121-
lambda checked, cat_name=category_name: self.on_category_selected(
127+
lambda checked,
128+
cat_name=category_name: self.on_category_selected(
122129
cat_name
123130
)
124131
)
File renamed without changes.
File renamed without changes.

ui/deleteCategory.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Form implementation generated from reading ui file 'deleteCategory.ui'
2+
#
3+
# Created by: PyQt6 UI code generator 6.10.0
4+
#
5+
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
6+
# run again. Do not edit this file unless you know what you are doing.
7+
8+
9+
from PyQt6 import QtCore, QtGui, QtWidgets
10+
11+
12+
class Ui_Dialog(object):
13+
def setupUi(self, Dialog):
14+
Dialog.setObjectName("Dialog")
15+
Dialog.resize(300, 110)
16+
font = QtGui.QFont()
17+
font.setFamily("Arial")
18+
Dialog.setFont(font)
19+
self.buttonBox = QtWidgets.QDialogButtonBox(parent=Dialog)
20+
self.buttonBox.setGeometry(QtCore.QRect(40, 60, 221, 41))
21+
self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
22+
self.buttonBox.setStandardButtons(
23+
QtWidgets.QDialogButtonBox.StandardButton.Cancel
24+
| QtWidgets.QDialogButtonBox.StandardButton.Ok
25+
)
26+
self.buttonBox.setCenterButtons(True)
27+
self.buttonBox.setObjectName("buttonBox")
28+
self.label = QtWidgets.QLabel(parent=Dialog)
29+
self.label.setGeometry(QtCore.QRect(30, 10, 241, 21))
30+
font = QtGui.QFont()
31+
font.setPointSize(12)
32+
self.label.setFont(font)
33+
self.label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
34+
self.label.setObjectName("label")
35+
self.comboBox = QtWidgets.QComboBox(parent=Dialog)
36+
self.comboBox.setGeometry(QtCore.QRect(90, 40, 121, 22))
37+
self.comboBox.setObjectName("comboBox")
38+
39+
self.retranslateUi(Dialog)
40+
self.buttonBox.accepted.connect(Dialog.accept) # type: ignore
41+
self.buttonBox.rejected.connect(Dialog.reject) # type: ignore
42+
QtCore.QMetaObject.connectSlotsByName(Dialog)
43+
44+
def retranslateUi(self, Dialog):
45+
_translate = QtCore.QCoreApplication.translate
46+
Dialog.setWindowTitle(_translate("Dialog", "Удаление категории"))
47+
self.label.setText(_translate("Dialog", "Имя категории"))

0 commit comments

Comments
 (0)