deskkit 1.2.2__tar.gz → 1.2.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. {deskkit-1.2.2 → deskkit-1.2.4}/PKG-INFO +1 -1
  2. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/__init__.py +1 -1
  3. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/generator/export.py +1 -3
  4. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/ui/login_window.py +62 -17
  5. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/ui/styles.py +28 -7
  6. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit.egg-info/PKG-INFO +1 -1
  7. {deskkit-1.2.2 → deskkit-1.2.4}/pyproject.toml +1 -1
  8. {deskkit-1.2.2 → deskkit-1.2.4}/LICENSE +0 -0
  9. {deskkit-1.2.2 → deskkit-1.2.4}/README.md +0 -0
  10. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/app.py +0 -0
  11. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/auth.py +0 -0
  12. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/builder.py +0 -0
  13. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/catalog.py +0 -0
  14. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/config.py +0 -0
  15. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/database.py +0 -0
  16. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/exceptions.py +0 -0
  17. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/features.py +0 -0
  18. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/flowchart.py +0 -0
  19. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/generator/__init__.py +0 -0
  20. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/generator/templates/auth.py +0 -0
  21. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/generator/templates/database.py +0 -0
  22. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/generator/templates/images_utils.py +0 -0
  23. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/generator/templates/main.py +0 -0
  24. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/generator/templates/qt_loader.py +0 -0
  25. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/images.py +0 -0
  26. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/presets.py +0 -0
  27. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/qt_backend.py +0 -0
  28. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/roles.py +0 -0
  29. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/tips.py +0 -0
  30. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/ui/__init__.py +0 -0
  31. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/ui/main_window.py +0 -0
  32. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit/ui/product_form.py +0 -0
  33. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit.egg-info/SOURCES.txt +0 -0
  34. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit.egg-info/dependency_links.txt +0 -0
  35. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit.egg-info/requires.txt +0 -0
  36. {deskkit-1.2.2 → deskkit-1.2.4}/deskkit.egg-info/top_level.txt +0 -0
  37. {deskkit-1.2.2 → deskkit-1.2.4}/setup.cfg +0 -0
  38. {deskkit-1.2.2 → deskkit-1.2.4}/tests/test_catalog.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deskkit
3
- Version: 1.2.2
3
+ Version: 1.2.4
4
4
  Summary: Конструктор десктоп-приложений на Qt и MySQL с модульной сборкой и экспортом проекта
5
5
  Author: DeskKit Team
6
6
  License-Expression: MIT
@@ -16,7 +16,7 @@ from deskkit.qt_backend import backend_name, init_qt
16
16
  from deskkit.roles import ADMIN, CLIENT, GUEST, MANAGER
17
17
  from deskkit.tips import generate_tips
18
18
 
19
- __version__ = "1.2.2"
19
+ __version__ = "1.2.4"
20
20
 
21
21
  __all__ = [
22
22
  "ShopApp",
@@ -204,9 +204,8 @@ def _patch_ui(source: str, *, rename_main: str | None = None) -> str:
204
204
  source = source.replace("self.config.column_labels", "settings.COLUMN_LABELS")
205
205
  source = source.replace("self.config.format_rules", "settings.FORMAT_RULES")
206
206
  source = source.replace("self.features = config.features", "self.features = settings.FEATURES")
207
- source = source.replace("self.config.features.", "self.features.")
207
+ source = source.replace("self.config.features.", "settings.FEATURES.")
208
208
  source = source.replace("self.config.sort_field", "settings.SORT_FIELD")
209
- source = source.replace("if self.config.features.", "if settings.FEATURES.")
210
209
  source = source.replace("load_pixmap(self.config,", "load_pixmap(")
211
210
  source = source.replace("ProductFormDialog(self.config, self.db,", "ProductFormDialog(self.db,")
212
211
  source = source.replace("LoginWindow(self.config, self.auth,", "LoginWindow(self.auth,")
@@ -214,7 +213,6 @@ def _patch_ui(source: str, *, rename_main: str | None = None) -> str:
214
213
  "save_product_image(\n self.config,\n self._new_photo_path,\n self.product.get(\"photo_url\"),\n )",
215
214
  "save_product_image(self._new_photo_path, self.product.get(\"photo_url\"))",
216
215
  )
217
- source = source.replace("qt.get_open_filename(", "qt.open_file_dialog(")
218
216
 
219
217
  if rename_main:
220
218
  source = source.replace(
@@ -26,73 +26,118 @@ class LoginWindow(QtWidgets.QDialog):
26
26
  ):
27
27
  super().__init__()
28
28
  self.config = config
29
+ self.features = config.features
29
30
  self.auth = auth
30
31
  self.on_success = on_success
31
32
 
32
33
  self.setWindowTitle(f"{config.title} — Вход")
33
- self.setFixedSize(450, 520)
34
+ self.setFixedSize(420, 480)
34
35
  self.setStyleSheet(APP_STYLE)
35
36
 
36
- layout = QtWidgets.QVBoxLayout(self)
37
- layout.setContentsMargins(0, 0, 0, 0)
37
+ root = QtWidgets.QVBoxLayout(self)
38
+ root.setContentsMargins(0, 0, 0, 0)
39
+ root.setSpacing(0)
38
40
 
39
41
  header = QtWidgets.QFrame()
40
- header.setStyleSheet(f"background: {PRIMARY};")
42
+ header.setObjectName("loginHeader")
43
+ header.setStyleSheet(
44
+ f"#loginHeader {{ background-color: {PRIMARY}; border: none; }}"
45
+ )
41
46
  header_layout = QtWidgets.QVBoxLayout(header)
47
+ header_layout.setContentsMargins(20, 28, 20, 24)
48
+ header_layout.setSpacing(6)
49
+
42
50
  title = QtWidgets.QLabel(config.title)
43
51
  title.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
44
- title.setStyleSheet("color: white; font-size: 22px; font-weight: bold; padding: 20px;")
52
+ title.setStyleSheet(
53
+ "color: white; font-size: 22px; font-weight: bold; background: transparent;"
54
+ )
45
55
  subtitle = QtWidgets.QLabel("Система управления каталогом")
46
56
  subtitle.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
47
- subtitle.setStyleSheet("color: #E8F5E9; font-size: 13px; padding-bottom: 16px;")
57
+ subtitle.setStyleSheet(
58
+ "color: #E8F5E9; font-size: 13px; background: transparent;"
59
+ )
48
60
  header_layout.addWidget(title)
49
61
  header_layout.addWidget(subtitle)
50
- layout.addWidget(header)
62
+ root.addWidget(header)
63
+
64
+ body = QtWidgets.QWidget()
65
+ body_layout = QtWidgets.QVBoxLayout(body)
66
+ body_layout.setContentsMargins(28, 24, 28, 16)
67
+ body_layout.setSpacing(12)
51
68
 
52
69
  form_frame = QtWidgets.QFrame()
53
- form_frame.setStyleSheet(f"background: {WHITE}; margin: 24px; border-radius: 8px;")
70
+ form_frame.setObjectName("loginCard")
71
+ form_frame.setStyleSheet(
72
+ f"#loginCard {{"
73
+ f" background-color: {WHITE};"
74
+ f" border: 1px solid #E0E0E0;"
75
+ f" border-radius: 8px;"
76
+ f"}}"
77
+ )
54
78
  form_layout = QtWidgets.QVBoxLayout(form_frame)
55
- form_layout.setContentsMargins(32, 24, 32, 24)
79
+ form_layout.setContentsMargins(24, 20, 24, 20)
80
+ form_layout.setSpacing(8)
81
+
82
+ lbl_login = QtWidgets.QLabel("Логин")
83
+ lbl_login.setStyleSheet("color: #333; font-weight: 600; background: transparent;")
84
+ form_layout.addWidget(lbl_login)
56
85
 
57
- form_layout.addWidget(QtWidgets.QLabel("Логин:"))
58
86
  self.login_edit = QtWidgets.QLineEdit()
59
87
  self.login_edit.setPlaceholderText("Введите логин (email)")
88
+ self.login_edit.setMinimumHeight(36)
60
89
  form_layout.addWidget(self.login_edit)
61
90
 
62
- form_layout.addWidget(QtWidgets.QLabel("Пароль:"))
91
+ form_layout.addSpacing(6)
92
+
93
+ lbl_password = QtWidgets.QLabel("Пароль")
94
+ lbl_password.setStyleSheet("color: #333; font-weight: 600; background: transparent;")
95
+ form_layout.addWidget(lbl_password)
96
+
63
97
  self.password_edit = QtWidgets.QLineEdit()
64
98
  self.password_edit.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
65
99
  self.password_edit.setPlaceholderText("Введите пароль")
100
+ self.password_edit.setMinimumHeight(36)
66
101
  form_layout.addWidget(self.password_edit)
67
102
 
68
103
  self.error_label = QtWidgets.QLabel("")
69
- self.error_label.setStyleSheet("color: #E74C3C;")
104
+ self.error_label.setStyleSheet("color: #E74C3C; background: transparent;")
70
105
  self.error_label.setWordWrap(True)
71
106
  self.error_label.hide()
72
107
  form_layout.addWidget(self.error_label)
73
108
 
109
+ form_layout.addSpacing(10)
110
+
74
111
  btn_login = QtWidgets.QPushButton("Войти")
75
112
  btn_login.setObjectName("primary")
113
+ btn_login.setCursor(QtCore.Qt.CursorShape.PointingHandCursor)
114
+ btn_login.setMinimumHeight(40)
76
115
  qt_backend.signal_connect(btn_login, "clicked", self._do_login)
77
116
  form_layout.addWidget(btn_login)
78
117
 
79
- if self.config.features.guest_login:
118
+ if self.features.guest_login:
80
119
  btn_guest = QtWidgets.QPushButton("Продолжить без авторизации")
81
120
  btn_guest.setObjectName("secondary")
121
+ btn_guest.setCursor(QtCore.Qt.CursorShape.PointingHandCursor)
122
+ btn_guest.setMinimumHeight(40)
82
123
  qt_backend.signal_connect(btn_guest, "clicked", self._do_guest)
83
124
  form_layout.addWidget(btn_guest)
84
125
 
85
- layout.addWidget(form_frame)
86
- layout.addStretch()
126
+ body_layout.addWidget(form_frame)
127
+ body_layout.addStretch(1)
87
128
 
88
129
  hint = QtWidgets.QLabel(
89
130
  "Для входа используйте учётную запись из таблицы users."
90
131
  )
91
132
  hint.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
92
- hint.setStyleSheet("color: #666; font-size: 11px; padding: 12px;")
93
- layout.addWidget(hint)
133
+ hint.setWordWrap(True)
134
+ hint.setStyleSheet("color: #666; font-size: 11px; background: transparent;")
135
+ body_layout.addWidget(hint)
136
+
137
+ root.addWidget(body, 1)
94
138
 
95
139
  self.password_edit.returnPressed.connect(self._do_login)
140
+ self.login_edit.setFocus()
96
141
 
97
142
  def _show_error(self, message: str) -> None:
98
143
  self.error_label.setText(message)
@@ -9,26 +9,41 @@ WHITE = "#FFFFFF"
9
9
  ERROR = "#E74C3C"
10
10
 
11
11
  APP_STYLE = f"""
12
- QMainWindow, QDialog {{
12
+ QMainWindow, QDialog, QWidget {{
13
13
  background-color: {BG};
14
14
  font-family: "Segoe UI", Arial, sans-serif;
15
15
  font-size: 13px;
16
+ color: #222222;
17
+ }}
18
+ QLabel {{
19
+ background: transparent;
20
+ color: #222222;
16
21
  }}
17
22
  QPushButton {{
18
23
  padding: 8px 16px;
19
- border-radius: 4px;
24
+ border-radius: 6px;
20
25
  border: none;
21
- min-height: 32px;
26
+ min-height: 36px;
27
+ font-size: 13px;
22
28
  }}
23
29
  QPushButton#primary {{
24
30
  background-color: {ACCENT};
25
31
  color: white;
26
32
  font-weight: bold;
27
33
  }}
34
+ QPushButton#primary:hover {{
35
+ background-color: #2980B9;
36
+ }}
37
+ QPushButton#primary:pressed {{
38
+ background-color: #1F6AA5;
39
+ }}
28
40
  QPushButton#secondary {{
29
41
  background-color: {GRAY};
30
42
  color: white;
31
43
  }}
44
+ QPushButton#secondary:hover {{
45
+ background-color: #7F8C8D;
46
+ }}
32
47
  QPushButton#success {{
33
48
  background-color: {PRIMARY};
34
49
  color: white;
@@ -38,14 +53,20 @@ QPushButton#danger {{
38
53
  color: white;
39
54
  }}
40
55
  QLineEdit, QComboBox, QSpinBox, QDoubleSpinBox, QTextEdit {{
41
- padding: 6px;
42
- border: 1px solid #CCC;
43
- border-radius: 4px;
56
+ padding: 8px 10px;
57
+ border: 1px solid #CCCCCC;
58
+ border-radius: 6px;
44
59
  background: white;
60
+ color: #222222;
61
+ min-height: 20px;
62
+ selection-background-color: {PRIMARY_LIGHT};
63
+ }}
64
+ QLineEdit:focus, QComboBox:focus, QSpinBox:focus, QDoubleSpinBox:focus, QTextEdit:focus {{
65
+ border: 1px solid {ACCENT};
45
66
  }}
46
67
  QTableWidget {{
47
68
  background: white;
48
- gridline-color: #DDD;
69
+ gridline-color: #DDDDDD;
49
70
  selection-background-color: {PRIMARY_LIGHT};
50
71
  }}
51
72
  QHeaderView::section {{
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deskkit
3
- Version: 1.2.2
3
+ Version: 1.2.4
4
4
  Summary: Конструктор десктоп-приложений на Qt и MySQL с модульной сборкой и экспортом проекта
5
5
  Author: DeskKit Team
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "deskkit"
7
- version = "1.2.2"
7
+ version = "1.2.4"
8
8
  description = "Конструктор десктоп-приложений на Qt и MySQL с модульной сборкой и экспортом проекта"
9
9
  readme = "README.md"
10
10
  license = "MIT"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes