pygpt-net 2.7.0__py3-none-any.whl → 2.7.2__py3-none-any.whl
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.
- pygpt_net/CHANGELOG.txt +14 -0
- pygpt_net/__init__.py +3 -3
- pygpt_net/controller/ctx/ctx.py +4 -1
- pygpt_net/controller/painter/common.py +43 -11
- pygpt_net/core/filesystem/filesystem.py +70 -0
- pygpt_net/core/filesystem/packer.py +161 -1
- pygpt_net/core/image/image.py +2 -2
- pygpt_net/core/platforms/platforms.py +14 -1
- pygpt_net/core/updater/updater.py +24 -12
- pygpt_net/core/video/video.py +2 -3
- pygpt_net/data/config/config.json +3 -3
- pygpt_net/data/config/models.json +3 -3
- pygpt_net/data/css/style.dark.css +13 -6
- pygpt_net/data/css/style.light.css +13 -5
- pygpt_net/data/locale/locale.de.ini +2 -0
- pygpt_net/data/locale/locale.en.ini +2 -0
- pygpt_net/data/locale/locale.es.ini +2 -0
- pygpt_net/data/locale/locale.fr.ini +2 -0
- pygpt_net/data/locale/locale.it.ini +2 -0
- pygpt_net/data/locale/locale.pl.ini +3 -1
- pygpt_net/data/locale/locale.uk.ini +2 -0
- pygpt_net/data/locale/locale.zh.ini +2 -0
- pygpt_net/provider/core/config/patch.py +16 -0
- pygpt_net/ui/dialog/preset.py +1 -0
- pygpt_net/ui/layout/toolbox/image.py +2 -1
- pygpt_net/ui/layout/toolbox/indexes.py +2 -0
- pygpt_net/ui/layout/toolbox/video.py +5 -1
- pygpt_net/ui/main.py +1 -0
- pygpt_net/ui/widget/dialog/update.py +18 -7
- pygpt_net/ui/widget/draw/painter.py +238 -51
- pygpt_net/ui/widget/filesystem/explorer.py +82 -0
- pygpt_net/ui/widget/option/combo.py +179 -13
- {pygpt_net-2.7.0.dist-info → pygpt_net-2.7.2.dist-info}/METADATA +44 -4
- {pygpt_net-2.7.0.dist-info → pygpt_net-2.7.2.dist-info}/RECORD +37 -37
- {pygpt_net-2.7.0.dist-info → pygpt_net-2.7.2.dist-info}/LICENSE +0 -0
- {pygpt_net-2.7.0.dist-info → pygpt_net-2.7.2.dist-info}/WHEEL +0 -0
- {pygpt_net-2.7.0.dist-info → pygpt_net-2.7.2.dist-info}/entry_points.txt +0 -0
|
@@ -179,16 +179,15 @@ NodeEditor {{
|
|
|
179
179
|
/* ComboBox */
|
|
180
180
|
QComboBox QAbstractItemView {{
|
|
181
181
|
border: 1px solid rgba(0,0,0,0.18);
|
|
182
|
-
border-radius: 0;
|
|
183
|
-
outline: 0;
|
|
184
182
|
}}
|
|
185
183
|
|
|
186
184
|
QListView#ComboPopupList {{
|
|
187
|
-
border-radius:
|
|
188
|
-
|
|
185
|
+
border-radius: 10px;
|
|
186
|
+
background: #1f2123;
|
|
187
|
+
border: 2px solid #4f5b62;
|
|
189
188
|
}}
|
|
190
189
|
|
|
191
|
-
QComboBox QAbstractItemView::item,
|
|
190
|
+
QComboBox[name="SearchableCombo"] QAbstractItemView::item,
|
|
192
191
|
QListView#ComboPopupList::item {{
|
|
193
192
|
min-height: 20px;
|
|
194
193
|
padding: 8px 33px;
|
|
@@ -212,4 +211,12 @@ QListView#ComboPopupList::item:disabled {{
|
|
|
212
211
|
|
|
213
212
|
QComboBox QAbstractItemView::item:hover,
|
|
214
213
|
QListView#ComboPopupList::item:hover {{ }}
|
|
215
|
-
|
|
214
|
+
|
|
215
|
+
QWidget#ComboPopupWindow {{
|
|
216
|
+
background: transparent;
|
|
217
|
+
border: 0;
|
|
218
|
+
}}
|
|
219
|
+
QListView#ComboPopupList > QWidget#ComboPopupViewport {{
|
|
220
|
+
background: transparent;
|
|
221
|
+
border-radius: 0px;
|
|
222
|
+
}}
|
|
@@ -294,17 +294,18 @@ NodeEditor {{
|
|
|
294
294
|
|
|
295
295
|
/* ComboBox */
|
|
296
296
|
QComboBox QAbstractItemView {{
|
|
297
|
-
border:
|
|
298
|
-
border-radius:
|
|
297
|
+
border: 0px;
|
|
298
|
+
border-radius: 10px;
|
|
299
299
|
outline: 0;
|
|
300
300
|
}}
|
|
301
301
|
|
|
302
302
|
QListView#ComboPopupList {{
|
|
303
|
-
border-radius:
|
|
303
|
+
border-radius: 10px;
|
|
304
304
|
outline: 0;
|
|
305
|
+
border: 0px solid #d6d6d6;
|
|
305
306
|
}}
|
|
306
307
|
|
|
307
|
-
QComboBox QAbstractItemView::item,
|
|
308
|
+
QComboBox[name="SearchableCombo"] QAbstractItemView::item,
|
|
308
309
|
QListView#ComboPopupList::item {{
|
|
309
310
|
min-height: 20px;
|
|
310
311
|
padding: 8px 32px;
|
|
@@ -328,4 +329,11 @@ QListView#ComboPopupList::item:disabled {{
|
|
|
328
329
|
|
|
329
330
|
QComboBox QAbstractItemView::item:hover,
|
|
330
331
|
QListView#ComboPopupList::item:hover {{ }}
|
|
331
|
-
|
|
332
|
+
QWidget#ComboPopupWindow {{
|
|
333
|
+
background: red;
|
|
334
|
+
border: 0;
|
|
335
|
+
}}
|
|
336
|
+
QListView#ComboPopupList > QWidget#ComboPopupViewport {{
|
|
337
|
+
background: red;
|
|
338
|
+
border-radius: 10px;
|
|
339
|
+
}}
|
|
@@ -38,6 +38,7 @@ action.open_dir_src = Quellverzeichnis öffnen
|
|
|
38
38
|
action.open_dir_storage = Speicherverzeichnis öffnen
|
|
39
39
|
action.open_new_tab = In neuem Tab öffnen
|
|
40
40
|
action.open_new_window = Öffnen (neues Fenster)
|
|
41
|
+
action.pack = Einpacken
|
|
41
42
|
action.paste = Einfügen
|
|
42
43
|
action.pin = Oben anheften
|
|
43
44
|
action.preview = Vorschau
|
|
@@ -66,6 +67,7 @@ action.tab.move.right = In die rechte Spalte verschieben
|
|
|
66
67
|
action.touch = Datei erstellen...
|
|
67
68
|
action.truncate = Alles löschen
|
|
68
69
|
action.undo = Rückgängig
|
|
70
|
+
action.unpack = Auspacken
|
|
69
71
|
action.unpin = Loslösen
|
|
70
72
|
action.upload = Dateien hier hochladen...
|
|
71
73
|
action.use = Verwenden
|
|
@@ -38,6 +38,7 @@ action.open_dir_src = Open Source Directory
|
|
|
38
38
|
action.open_dir_storage = Open Storage directory
|
|
39
39
|
action.open_new_tab = Open in a new tab
|
|
40
40
|
action.open_new_window = Open (new window)
|
|
41
|
+
action.pack = Pack
|
|
41
42
|
action.paste = Paste
|
|
42
43
|
action.pin = Pin on top
|
|
43
44
|
action.preview = Preview
|
|
@@ -66,6 +67,7 @@ action.tab.move.right = Move to right column
|
|
|
66
67
|
action.touch = Create file...
|
|
67
68
|
action.truncate = Truncate
|
|
68
69
|
action.undo = Undo
|
|
70
|
+
action.unpack = Unpack
|
|
69
71
|
action.unpin = Unpin
|
|
70
72
|
action.upload = Upload files here...
|
|
71
73
|
action.use = Use
|
|
@@ -38,6 +38,7 @@ action.open_dir_src = Abrir directorio fuente
|
|
|
38
38
|
action.open_dir_storage = Abrir directorio de almacenamiento
|
|
39
39
|
action.open_new_tab = Abrir en una nueva pestaña
|
|
40
40
|
action.open_new_window = Abrir (nueva ventana)
|
|
41
|
+
action.pack = Empaquetar
|
|
41
42
|
action.paste = Pegar
|
|
42
43
|
action.pin = Fijar en la parte superior
|
|
43
44
|
action.preview = Vista previa
|
|
@@ -66,6 +67,7 @@ action.tab.move.right = Mover a la columna derecha
|
|
|
66
67
|
action.touch = Crear archivo...
|
|
67
68
|
action.truncate = Borrar todo
|
|
68
69
|
action.undo = Deshacer
|
|
70
|
+
action.unpack = Desempaquetar
|
|
69
71
|
action.unpin = Desanclar
|
|
70
72
|
action.upload = Sube archivos aquí...
|
|
71
73
|
action.use = Usar
|
|
@@ -38,6 +38,7 @@ action.open_dir_src = Ouvrir le répertoire source
|
|
|
38
38
|
action.open_dir_storage = Ouvrir le répertoire de stockage
|
|
39
39
|
action.open_new_tab = Ouvrir dans un nouvel onglet
|
|
40
40
|
action.open_new_window = Ouvrir (nouvelle fenêtre)
|
|
41
|
+
action.pack = Emballer
|
|
41
42
|
action.paste = Coller
|
|
42
43
|
action.pin = Épingler en haut
|
|
43
44
|
action.preview = Aperçu
|
|
@@ -66,6 +67,7 @@ action.tab.move.right = Déplacer vers la colonne de droite
|
|
|
66
67
|
action.touch = Créer un fichier...
|
|
67
68
|
action.truncate = Tout effacer
|
|
68
69
|
action.undo = Annuler
|
|
70
|
+
action.unpack = Déballer
|
|
69
71
|
action.unpin = Détacher
|
|
70
72
|
action.upload = Téléchargez des fichiers ici...
|
|
71
73
|
action.use = Utiliser
|
|
@@ -38,6 +38,7 @@ action.open_dir_src = Apri la cartella sorgente
|
|
|
38
38
|
action.open_dir_storage = Apri la cartella di archiviazione
|
|
39
39
|
action.open_new_tab = Apri in una nuova scheda
|
|
40
40
|
action.open_new_window = Apri (nuova finestra)
|
|
41
|
+
action.pack = Imballare
|
|
41
42
|
action.paste = Incolla
|
|
42
43
|
action.pin = Fissa in alto
|
|
43
44
|
action.preview = Anteprima
|
|
@@ -66,6 +67,7 @@ action.tab.move.right = Sposta nella colonna di destra
|
|
|
66
67
|
action.touch = Crea file...
|
|
67
68
|
action.truncate = Cancellare tutto
|
|
68
69
|
action.undo = Annulla
|
|
70
|
+
action.unpack = Scartare
|
|
69
71
|
action.unpin = Sgancia
|
|
70
72
|
action.upload = Carica file qui...
|
|
71
73
|
action.use = Usa
|
|
@@ -27,7 +27,7 @@ action.group.new = Nowa grupa
|
|
|
27
27
|
action.group.remove = Usuń z grupy
|
|
28
28
|
action.idx = Indeksuj w LlamaIndex...
|
|
29
29
|
action.idx.remove = Usuń z
|
|
30
|
-
action.import = Importuj
|
|
30
|
+
action.import = Importuj
|
|
31
31
|
action.mkdir = Utwórz katalog...
|
|
32
32
|
action.move_to = Przenieś do
|
|
33
33
|
action.new = Nowy...
|
|
@@ -38,6 +38,7 @@ action.open_dir_src = Otwórz katalog źródłowy
|
|
|
38
38
|
action.open_dir_storage = Otwórz katalog magazynowy
|
|
39
39
|
action.open_new_tab = Otwórz w nowej karcie
|
|
40
40
|
action.open_new_window = Otwórz (w nowym oknie)
|
|
41
|
+
action.pack = Spakuj
|
|
41
42
|
action.paste = Wklej
|
|
42
43
|
action.pin = Przypnij na górze
|
|
43
44
|
action.preview = Podgląd
|
|
@@ -66,6 +67,7 @@ action.tab.move.right = Przenieś do prawej kolumny
|
|
|
66
67
|
action.touch = Utwórz plik...
|
|
67
68
|
action.truncate = Wyczyść wszystko
|
|
68
69
|
action.undo = Cofnij
|
|
70
|
+
action.unpack = Rozpakuj
|
|
69
71
|
action.unpin = Odepnij
|
|
70
72
|
action.upload = Prześlij tutaj pliki...
|
|
71
73
|
action.use = Użyj
|
|
@@ -38,6 +38,7 @@ action.open_dir_src = Відкрити вихідний каталог
|
|
|
38
38
|
action.open_dir_storage = Відкрити каталог зберігання
|
|
39
39
|
action.open_new_tab = Відкрити у новій вкладці
|
|
40
40
|
action.open_new_window = Відкрити (нове вікно)
|
|
41
|
+
action.pack = Запакувати
|
|
41
42
|
action.paste = Вставити
|
|
42
43
|
action.pin = Прикріпити зверху
|
|
43
44
|
action.preview = Попередній перегляд
|
|
@@ -66,6 +67,7 @@ action.tab.move.right = Перемістити в праву колонку
|
|
|
66
67
|
action.touch = Створити файл...
|
|
67
68
|
action.truncate = Очистити все
|
|
68
69
|
action.undo = Скасувати
|
|
70
|
+
action.unpack = Розпакувати
|
|
69
71
|
action.unpin = Відкріпити
|
|
70
72
|
action.upload = Завантажте файли тут...
|
|
71
73
|
action.use = Використовуйте
|
|
@@ -38,6 +38,7 @@ action.open_dir_src = 打开源目录
|
|
|
38
38
|
action.open_dir_storage = 打开存储目录
|
|
39
39
|
action.open_new_tab = 在新标签页中打开
|
|
40
40
|
action.open_new_window = 打开(新窗口)
|
|
41
|
+
action.pack = 打包
|
|
41
42
|
action.paste = 粘贴
|
|
42
43
|
action.pin = 置頂
|
|
43
44
|
action.preview = 预览
|
|
@@ -66,6 +67,7 @@ action.tab.move.right = 移到右列
|
|
|
66
67
|
action.touch = 創建文件...
|
|
67
68
|
action.truncate = 截斷
|
|
68
69
|
action.undo = 撤銷
|
|
70
|
+
action.unpack = 解压
|
|
69
71
|
action.unpin = 取消置頂
|
|
70
72
|
action.upload = 在這裡上傳文件...
|
|
71
73
|
action.use = 使用
|
|
@@ -191,6 +191,22 @@ class Patch:
|
|
|
191
191
|
patch_css('style.dark.css', True)
|
|
192
192
|
updated = True
|
|
193
193
|
|
|
194
|
+
# < 2.7.1
|
|
195
|
+
if old < parse_version("2.7.1"):
|
|
196
|
+
print("Migrating config from < 2.7.1...")
|
|
197
|
+
# update: combo boxes css
|
|
198
|
+
patch_css('style.light.css', True)
|
|
199
|
+
patch_css('style.dark.css', True)
|
|
200
|
+
updated = True
|
|
201
|
+
|
|
202
|
+
# < 2.7.2
|
|
203
|
+
if old < parse_version("2.7.2"):
|
|
204
|
+
print("Migrating config from < 2.7.2...")
|
|
205
|
+
# fix: combo boxes css width
|
|
206
|
+
patch_css('style.light.css', True)
|
|
207
|
+
patch_css('style.dark.css', True)
|
|
208
|
+
updated = True
|
|
209
|
+
|
|
194
210
|
# update file
|
|
195
211
|
migrated = False
|
|
196
212
|
if updated:
|
pygpt_net/ui/dialog/preset.py
CHANGED
|
@@ -258,6 +258,7 @@ class Preset(BaseConfigDialog):
|
|
|
258
258
|
personalize_rows.addWidget(self.window.ui.nodes['preset.editor.avatar'])
|
|
259
259
|
personalize_rows.addStretch(1)
|
|
260
260
|
personalize_rows.addWidget(warn_label)
|
|
261
|
+
personalize_rows.setContentsMargins(10, 30, 10, 0)
|
|
261
262
|
|
|
262
263
|
rows.setContentsMargins(0, 0, 0, 0)
|
|
263
264
|
rows.addStretch(1)
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
|
7
7
|
# MIT License #
|
|
8
8
|
# Created By : Marcin Szczygliński #
|
|
9
|
-
# Updated Date: 2025.
|
|
9
|
+
# Updated Date: 2025.12.28 18:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
from PySide6.QtWidgets import QVBoxLayout, QWidget
|
|
@@ -52,6 +52,7 @@ class Image:
|
|
|
52
52
|
|
|
53
53
|
option_resolutions = self.window.core.image.get_resolution_option()
|
|
54
54
|
conf_global['img_resolution'] = OptionCombo(self.window, 'global', 'img_resolution', option_resolutions)
|
|
55
|
+
conf_global['img_resolution'].setMinimumWidth(160)
|
|
55
56
|
|
|
56
57
|
rows = QVBoxLayout()
|
|
57
58
|
rows.addWidget(conf_global['img_variants'])
|
|
@@ -91,6 +91,7 @@ class Indexes:
|
|
|
91
91
|
option = {
|
|
92
92
|
"name": "current_index",
|
|
93
93
|
"label": "toolbox.llama_index.current_index",
|
|
94
|
+
"search": False,
|
|
94
95
|
"keys": [],
|
|
95
96
|
"value": None,
|
|
96
97
|
}
|
|
@@ -105,6 +106,7 @@ class Indexes:
|
|
|
105
106
|
option = {
|
|
106
107
|
"name": "llama.idx.mode",
|
|
107
108
|
"label": "toolbox.llama_index.mode",
|
|
109
|
+
"search": False,
|
|
108
110
|
"keys": self.window.controller.idx.get_modes_keys(),
|
|
109
111
|
"value": "chat",
|
|
110
112
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
|
7
7
|
# MIT License #
|
|
8
8
|
# Created By : Marcin Szczygliński #
|
|
9
|
-
# Updated Date: 2025.12.
|
|
9
|
+
# Updated Date: 2025.12.28 18:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
from PySide6.QtWidgets import QWidget, QHBoxLayout
|
|
@@ -45,6 +45,10 @@ class Video:
|
|
|
45
45
|
conf_global['video.resolution'] = OptionCombo(self.window, 'global', 'video.resolution', option_resolution)
|
|
46
46
|
conf_global['video.duration'] = OptionInput(self.window, 'global', 'video.duration', option_duration)
|
|
47
47
|
|
|
48
|
+
conf_global['video.aspect_ratio'].setMinimumWidth(120)
|
|
49
|
+
conf_global['video.resolution'].setMinimumWidth(120)
|
|
50
|
+
conf_global['video.duration'].setMinimumWidth(50)
|
|
51
|
+
|
|
48
52
|
rows = QHBoxLayout()
|
|
49
53
|
rows.addWidget(conf_global['video.resolution'], 2)
|
|
50
54
|
rows.addWidget(conf_global['video.aspect_ratio'], 2)
|
pygpt_net/ui/main.py
CHANGED
|
@@ -46,6 +46,7 @@ class MainWindow(QMainWindow, QtStyleTools):
|
|
|
46
46
|
:param args: launcher arguments
|
|
47
47
|
"""
|
|
48
48
|
super().__init__()
|
|
49
|
+
self.setWindowFlags(self.windowFlags() | Qt.WindowMinMaxButtonsHint | Qt.WindowMaximizeButtonHint)
|
|
49
50
|
self.app = app
|
|
50
51
|
self.args = args
|
|
51
52
|
self.timer = None
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# GitHub: https://github.com/szczyglis-dev/py-gpt #
|
|
7
7
|
# MIT License #
|
|
8
8
|
# Created By : Marcin Szczygliński #
|
|
9
|
-
# Updated Date: 2025.
|
|
9
|
+
# Updated Date: 2025.12.29 21:00:00 #
|
|
10
10
|
# ================================================== #
|
|
11
11
|
|
|
12
12
|
import os
|
|
@@ -32,8 +32,11 @@ class UpdateDialog(BaseDialog):
|
|
|
32
32
|
self.window = window
|
|
33
33
|
self.setParent(window)
|
|
34
34
|
self.setWindowTitle(trans('update.title'))
|
|
35
|
+
|
|
36
|
+
version = self.window.meta['version']
|
|
35
37
|
self.cmd_pip = "pip install --upgrade pygpt-net"
|
|
36
38
|
self.cmd_snap = "sudo snap refresh pygpt"
|
|
39
|
+
self.cmd_appimage = f"appimageupdatetool ./PyGPT-{version}-x86_64.AppImage"
|
|
37
40
|
|
|
38
41
|
# www
|
|
39
42
|
self.www = QPushButton(trans('update.download'))
|
|
@@ -133,8 +136,9 @@ class UpdateDialog(BaseDialog):
|
|
|
133
136
|
version: str,
|
|
134
137
|
build: str,
|
|
135
138
|
changelog: str,
|
|
136
|
-
download_windows: str,
|
|
137
|
-
download_linux: str
|
|
139
|
+
download_windows: str = "",
|
|
140
|
+
download_linux: str = "",
|
|
141
|
+
download_appimage: str = ""
|
|
138
142
|
):
|
|
139
143
|
"""
|
|
140
144
|
Set update data
|
|
@@ -145,6 +149,7 @@ class UpdateDialog(BaseDialog):
|
|
|
145
149
|
:param changelog: changelog
|
|
146
150
|
:param download_windows: download link for windows
|
|
147
151
|
:param download_linux: download link for linux
|
|
152
|
+
:param download_appimage: download link for appimage
|
|
148
153
|
"""
|
|
149
154
|
# prepare data
|
|
150
155
|
info = trans("update.info")
|
|
@@ -179,8 +184,8 @@ class UpdateDialog(BaseDialog):
|
|
|
179
184
|
if self.window.core.platforms.is_snap(): # snap
|
|
180
185
|
self.cmd.setText(self.cmd_snap)
|
|
181
186
|
self.cmd.setVisible(True)
|
|
182
|
-
elif self.window.core.config.is_compiled(): # compiled
|
|
183
|
-
if self.window.core.platforms.is_windows():
|
|
187
|
+
elif self.window.core.config.is_compiled(): # compiled versions
|
|
188
|
+
if self.window.core.platforms.is_windows(): # Windows
|
|
184
189
|
self.download_link = download_windows
|
|
185
190
|
self.download_file.setText("{} .msi ({})".format(trans("action.download"), version))
|
|
186
191
|
if is_store:
|
|
@@ -191,11 +196,17 @@ class UpdateDialog(BaseDialog):
|
|
|
191
196
|
self.download_file.setVisible(True)
|
|
192
197
|
self.info_upgrade.setVisible(True)
|
|
193
198
|
self.www.setVisible(False)
|
|
194
|
-
elif self.window.core.platforms.is_linux():
|
|
199
|
+
elif self.window.core.platforms.is_linux(): # Linux
|
|
195
200
|
self.download_link = download_linux
|
|
196
201
|
self.download_file.setText("{} .tar.gz ({})".format(trans("action.download"), version))
|
|
197
202
|
self.download_file.setVisible(True)
|
|
198
|
-
|
|
203
|
+
elif self.window.core.platforms.is_appimage(): # AppImage
|
|
204
|
+
self.cmd.setText(self.cmd_appimage)
|
|
205
|
+
self.cmd.setVisible(True)
|
|
206
|
+
self.download_link = download_appimage
|
|
207
|
+
self.download_file.setText("{} .AppImage ({})".format(trans("action.download"), version))
|
|
208
|
+
self.download_file.setVisible(True)
|
|
209
|
+
else: # PyPi package
|
|
199
210
|
self.cmd.setText(self.cmd_pip)
|
|
200
211
|
self.cmd.setVisible(True)
|
|
201
212
|
|