sticker-convert 2.8.0__py3-none-any.whl → 2.8.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.
- sticker_convert/cli.py +4 -0
- sticker_convert/converter.py +8 -8
- sticker_convert/downloaders/download_base.py +3 -7
- sticker_convert/downloaders/download_kakao.py +3 -4
- sticker_convert/downloaders/download_line.py +3 -4
- sticker_convert/downloaders/download_signal.py +3 -4
- sticker_convert/downloaders/download_telegram.py +3 -4
- sticker_convert/gui.py +3 -1
- sticker_convert/gui_components/windows/advanced_compression_window.py +117 -101
- sticker_convert/job.py +81 -89
- sticker_convert/job_option.py +3 -0
- sticker_convert/resources/compression.json +11 -0
- sticker_convert/resources/help.json +1 -0
- sticker_convert/uploaders/compress_wastickers.py +3 -4
- sticker_convert/uploaders/upload_base.py +2 -8
- sticker_convert/uploaders/upload_signal.py +3 -4
- sticker_convert/uploaders/upload_telegram.py +3 -4
- sticker_convert/uploaders/xcode_imessage.py +3 -4
- sticker_convert/utils/callback.py +33 -21
- sticker_convert/utils/media/codec_info.py +3 -7
- sticker_convert/version.py +1 -1
- {sticker_convert-2.8.0.dist-info → sticker_convert-2.8.2.dist-info}/METADATA +18 -15
- {sticker_convert-2.8.0.dist-info → sticker_convert-2.8.2.dist-info}/RECORD +27 -27
- {sticker_convert-2.8.0.dist-info → sticker_convert-2.8.2.dist-info}/LICENSE +0 -0
- {sticker_convert-2.8.0.dist-info → sticker_convert-2.8.2.dist-info}/WHEEL +0 -0
- {sticker_convert-2.8.0.dist-info → sticker_convert-2.8.2.dist-info}/entry_points.txt +0 -0
- {sticker_convert-2.8.0.dist-info → sticker_convert-2.8.2.dist-info}/top_level.txt +0 -0
sticker_convert/cli.py
CHANGED
@@ -119,6 +119,7 @@ class CLI:
|
|
119
119
|
"duration_max",
|
120
120
|
"vid_size_max",
|
121
121
|
"img_size_max",
|
122
|
+
"padding_percent",
|
122
123
|
)
|
123
124
|
flags_comp_float = ("fps_power", "res_power", "quality_power", "color_power")
|
124
125
|
flags_comp_str = (
|
@@ -372,6 +373,9 @@ class CLI:
|
|
372
373
|
bg_color=self.compression_presets[preset]["bg_color"]
|
373
374
|
if args.bg_color is None
|
374
375
|
else args.bg_color,
|
376
|
+
padding_percent=self.compression_presets[preset]["padding_percent"]
|
377
|
+
if args.padding_percent is None
|
378
|
+
else args.padding_percent,
|
375
379
|
steps=self.compression_presets[preset]["steps"]
|
376
380
|
if args.steps is None
|
377
381
|
else args.steps,
|
sticker_convert/converter.py
CHANGED
@@ -4,7 +4,6 @@ from fractions import Fraction
|
|
4
4
|
from io import BytesIO
|
5
5
|
from math import ceil, floor
|
6
6
|
from pathlib import Path
|
7
|
-
from queue import Queue
|
8
7
|
from typing import TYPE_CHECKING, Any, Dict, List, Literal, Optional, Tuple, Union, cast
|
9
8
|
|
10
9
|
import numpy as np
|
@@ -12,7 +11,7 @@ from PIL import Image
|
|
12
11
|
from PIL import __version__ as PillowVersion
|
13
12
|
|
14
13
|
from sticker_convert.job_option import CompOption
|
15
|
-
from sticker_convert.utils.callback import
|
14
|
+
from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
|
16
15
|
from sticker_convert.utils.files.cache_store import CacheStore
|
17
16
|
from sticker_convert.utils.media.codec_info import CodecInfo, rounding
|
18
17
|
from sticker_convert.utils.media.format_verify import FormatVerify
|
@@ -120,7 +119,7 @@ class StickerConvert:
|
|
120
119
|
in_f: Union[Path, Tuple[Path, bytes]],
|
121
120
|
out_f: Path,
|
122
121
|
opt_comp: CompOption,
|
123
|
-
cb:
|
122
|
+
cb: CallbackProtocol,
|
124
123
|
# cb_return: CallbackReturn
|
125
124
|
) -> None:
|
126
125
|
self.in_f: Union[bytes, Path]
|
@@ -186,7 +185,7 @@ class StickerConvert:
|
|
186
185
|
in_f: Union[Path, Tuple[Path, bytes]],
|
187
186
|
out_f: Path,
|
188
187
|
opt_comp: CompOption,
|
189
|
-
cb:
|
188
|
+
cb: CallbackProtocol,
|
190
189
|
_cb_return: CallbackReturn,
|
191
190
|
) -> Tuple[bool, Path, Union[None, bytes, Path], int]:
|
192
191
|
sticker = StickerConvert(in_f, out_f, opt_comp, cb)
|
@@ -598,12 +597,13 @@ class StickerConvert:
|
|
598
597
|
if self.res_h is None:
|
599
598
|
self.res_h = height
|
600
599
|
|
600
|
+
scaling = 1 - (self.opt_comp.padding_percent / 100)
|
601
601
|
if width > height:
|
602
|
-
width_new = self.res_w
|
603
|
-
height_new = height * self.res_w // width
|
602
|
+
width_new = int(self.res_w * scaling)
|
603
|
+
height_new = int(height * self.res_w // width * scaling)
|
604
604
|
else:
|
605
|
-
height_new = self.res_h
|
606
|
-
width_new = width * self.res_h // height
|
605
|
+
height_new = int(self.res_h * scaling)
|
606
|
+
width_new = int(width * self.res_h // height * scaling)
|
607
607
|
|
608
608
|
with im.resize((width_new, height_new), resample=resample) as im_resized:
|
609
609
|
with Image.new(
|
@@ -2,13 +2,12 @@
|
|
2
2
|
from __future__ import annotations
|
3
3
|
|
4
4
|
from pathlib import Path
|
5
|
-
from
|
6
|
-
from typing import Any, List, Optional, Tuple, Union
|
5
|
+
from typing import Any, List, Optional, Tuple
|
7
6
|
|
8
7
|
import requests
|
9
8
|
|
10
9
|
from sticker_convert.job_option import CredOption
|
11
|
-
from sticker_convert.utils.callback import
|
10
|
+
from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
|
12
11
|
|
13
12
|
|
14
13
|
class DownloadBase:
|
@@ -17,10 +16,7 @@ class DownloadBase:
|
|
17
16
|
url: str,
|
18
17
|
out_dir: Path,
|
19
18
|
opt_cred: Optional[CredOption],
|
20
|
-
cb:
|
21
|
-
Queue[CbQueueItemType],
|
22
|
-
Callback,
|
23
|
-
],
|
19
|
+
cb: CallbackProtocol,
|
24
20
|
cb_return: CallbackReturn,
|
25
21
|
) -> None:
|
26
22
|
self.url = url
|
@@ -5,8 +5,7 @@ import json
|
|
5
5
|
import zipfile
|
6
6
|
from io import BytesIO
|
7
7
|
from pathlib import Path
|
8
|
-
from
|
9
|
-
from typing import Any, List, Optional, Tuple, Union
|
8
|
+
from typing import Any, List, Optional, Tuple
|
10
9
|
from urllib.parse import urlparse
|
11
10
|
|
12
11
|
import requests
|
@@ -15,7 +14,7 @@ from bs4.element import Tag
|
|
15
14
|
|
16
15
|
from sticker_convert.downloaders.download_base import DownloadBase
|
17
16
|
from sticker_convert.job_option import CredOption
|
18
|
-
from sticker_convert.utils.callback import
|
17
|
+
from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
|
19
18
|
from sticker_convert.utils.files.metadata_handler import MetadataHandler
|
20
19
|
from sticker_convert.utils.media.decrypt_kakao import DecryptKakao
|
21
20
|
|
@@ -249,7 +248,7 @@ class DownloadKakao(DownloadBase):
|
|
249
248
|
url: str,
|
250
249
|
out_dir: Path,
|
251
250
|
opt_cred: Optional[CredOption],
|
252
|
-
cb:
|
251
|
+
cb: CallbackProtocol,
|
253
252
|
cb_return: CallbackReturn,
|
254
253
|
) -> bool:
|
255
254
|
downloader = DownloadKakao(url, out_dir, opt_cred, cb, cb_return)
|
@@ -7,8 +7,7 @@ import string
|
|
7
7
|
import zipfile
|
8
8
|
from io import BytesIO
|
9
9
|
from pathlib import Path
|
10
|
-
from
|
11
|
-
from typing import Any, Dict, List, Optional, Tuple, Union
|
10
|
+
from typing import Any, Dict, List, Optional, Tuple
|
12
11
|
from urllib import parse
|
13
12
|
|
14
13
|
import requests
|
@@ -18,7 +17,7 @@ from PIL import Image
|
|
18
17
|
from sticker_convert.downloaders.download_base import DownloadBase
|
19
18
|
from sticker_convert.job_option import CredOption
|
20
19
|
from sticker_convert.utils.auth.get_line_auth import GetLineAuth
|
21
|
-
from sticker_convert.utils.callback import
|
20
|
+
from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
|
22
21
|
from sticker_convert.utils.files.metadata_handler import MetadataHandler
|
23
22
|
from sticker_convert.utils.media.apple_png_normalize import ApplePngNormalize
|
24
23
|
|
@@ -466,7 +465,7 @@ class DownloadLine(DownloadBase):
|
|
466
465
|
url: str,
|
467
466
|
out_dir: Path,
|
468
467
|
opt_cred: Optional[CredOption],
|
469
|
-
cb:
|
468
|
+
cb: CallbackProtocol,
|
470
469
|
cb_return: CallbackReturn,
|
471
470
|
) -> bool:
|
472
471
|
downloader = DownloadLine(url, out_dir, opt_cred, cb, cb_return)
|
@@ -1,7 +1,6 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
2
|
from pathlib import Path
|
3
|
-
from
|
4
|
-
from typing import Dict, Optional, Union
|
3
|
+
from typing import Dict, Optional
|
5
4
|
|
6
5
|
import anyio
|
7
6
|
from signalstickers_client import StickersClient # type: ignore
|
@@ -10,7 +9,7 @@ from signalstickers_client.models import StickerPack # type: ignore
|
|
10
9
|
|
11
10
|
from sticker_convert.downloaders.download_base import DownloadBase
|
12
11
|
from sticker_convert.job_option import CredOption
|
13
|
-
from sticker_convert.utils.callback import
|
12
|
+
from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
|
14
13
|
from sticker_convert.utils.files.metadata_handler import MetadataHandler
|
15
14
|
from sticker_convert.utils.media.codec_info import CodecInfo
|
16
15
|
|
@@ -86,7 +85,7 @@ class DownloadSignal(DownloadBase):
|
|
86
85
|
url: str,
|
87
86
|
out_dir: Path,
|
88
87
|
opt_cred: Optional[CredOption],
|
89
|
-
cb:
|
88
|
+
cb: CallbackProtocol,
|
90
89
|
cb_return: CallbackReturn,
|
91
90
|
) -> bool:
|
92
91
|
downloader = DownloadSignal(url, out_dir, opt_cred, cb, cb_return)
|
@@ -1,6 +1,5 @@
|
|
1
1
|
#!/usr/bin/env python3
|
2
2
|
from pathlib import Path
|
3
|
-
from queue import Queue
|
4
3
|
from typing import Dict, Optional, Union
|
5
4
|
from urllib.parse import urlparse
|
6
5
|
|
@@ -11,7 +10,7 @@ from telegram.ext import AIORateLimiter, ApplicationBuilder
|
|
11
10
|
|
12
11
|
from sticker_convert.downloaders.download_base import DownloadBase
|
13
12
|
from sticker_convert.job_option import CredOption
|
14
|
-
from sticker_convert.utils.callback import
|
13
|
+
from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
|
15
14
|
from sticker_convert.utils.files.metadata_handler import MetadataHandler
|
16
15
|
|
17
16
|
|
@@ -43,7 +42,7 @@ class DownloadTelegram(DownloadBase):
|
|
43
42
|
application = ( # type: ignore
|
44
43
|
ApplicationBuilder()
|
45
44
|
.token(self.token)
|
46
|
-
.rate_limiter(AIORateLimiter())
|
45
|
+
.rate_limiter(AIORateLimiter(max_retries=3))
|
47
46
|
.connect_timeout(timeout)
|
48
47
|
.pool_timeout(timeout)
|
49
48
|
.read_timeout(timeout)
|
@@ -124,7 +123,7 @@ class DownloadTelegram(DownloadBase):
|
|
124
123
|
url: str,
|
125
124
|
out_dir: Path,
|
126
125
|
opt_cred: Optional[CredOption],
|
127
|
-
cb:
|
126
|
+
cb: CallbackProtocol,
|
128
127
|
cb_return: CallbackReturn,
|
129
128
|
) -> bool:
|
130
129
|
downloader = DownloadTelegram(url, out_dir, opt_cred, cb, cb_return)
|
sticker_convert/gui.py
CHANGED
@@ -125,6 +125,7 @@ class GUI(Window):
|
|
125
125
|
self.duration_min_var = IntVar(self)
|
126
126
|
self.duration_max_var = IntVar(self)
|
127
127
|
self.duration_disable_var = BooleanVar()
|
128
|
+
self.padding_percent_var = IntVar(self)
|
128
129
|
self.img_size_max_var = IntVar(self)
|
129
130
|
self.vid_size_max_var = IntVar(self)
|
130
131
|
self.size_disable_var = BooleanVar()
|
@@ -519,6 +520,7 @@ class GUI(Window):
|
|
519
520
|
if not self.duration_disable_var.get()
|
520
521
|
else None,
|
521
522
|
bg_color=self.bg_color_var.get(),
|
523
|
+
padding_percent=self.padding_percent_var.get(),
|
522
524
|
steps=self.steps_var.get(),
|
523
525
|
fake_vid=self.fake_vid_var.get(),
|
524
526
|
scale_filter=self.scale_filter_var.get(),
|
@@ -642,10 +644,10 @@ class GUI(Window):
|
|
642
644
|
|
643
645
|
def cb_bar(
|
644
646
|
self,
|
645
|
-
*args: Any,
|
646
647
|
set_progress_mode: Optional[str] = None,
|
647
648
|
steps: int = 0,
|
648
649
|
update_bar: int = 0,
|
650
|
+
*args: Any,
|
649
651
|
**kwargs: Any,
|
650
652
|
) -> None:
|
651
653
|
self.progress_frame.update_progress_bar(
|
@@ -227,6 +227,16 @@ class AdvancedCompressionWindow(BaseWindow):
|
|
227
227
|
)
|
228
228
|
self.color_power_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
|
229
229
|
|
230
|
+
self.padding_percent_help_btn = self.add_help_btn(
|
231
|
+
self.gui.help["comp"]["padding_percent"]
|
232
|
+
)
|
233
|
+
self.padding_percent_lbl1 = Label(self.frame_advcomp, text="Padding")
|
234
|
+
self.padding_percent_lbl2 = Label(self.frame_advcomp, text="0-100%")
|
235
|
+
self.padding_percent_entry = Entry(
|
236
|
+
self.frame_advcomp, textvariable=self.gui.padding_percent_var, width=8
|
237
|
+
)
|
238
|
+
self.padding_percent_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
|
239
|
+
|
230
240
|
self.fake_vid_help_btn = self.add_help_btn(self.gui.help["comp"]["fake_vid"])
|
231
241
|
self.fake_vid_lbl = Label(
|
232
242
|
self.frame_advcomp, text="Convert (faking) image to video"
|
@@ -297,113 +307,119 @@ class AdvancedCompressionWindow(BaseWindow):
|
|
297
307
|
self.ph_im = ImageTk.PhotoImage(self.im)
|
298
308
|
self.default_emoji_dsp = Label(self.frame_advcomp, image=self.ph_im)
|
299
309
|
|
300
|
-
|
301
|
-
self.
|
302
|
-
self.
|
303
|
-
self.
|
304
|
-
self.
|
305
|
-
self.
|
306
|
-
self.
|
307
|
-
|
308
|
-
|
309
|
-
self.
|
310
|
-
self.
|
311
|
-
self.
|
312
|
-
self.
|
313
|
-
self.
|
314
|
-
self.
|
315
|
-
|
316
|
-
|
317
|
-
self.
|
318
|
-
self.
|
319
|
-
self.
|
320
|
-
self.
|
321
|
-
self.
|
322
|
-
self.
|
323
|
-
|
324
|
-
|
325
|
-
self.
|
326
|
-
self.
|
327
|
-
self.
|
328
|
-
self.
|
329
|
-
self.
|
330
|
-
self.
|
331
|
-
|
332
|
-
|
333
|
-
self.
|
334
|
-
self.
|
335
|
-
self.
|
336
|
-
self.
|
337
|
-
self.
|
338
|
-
self.
|
339
|
-
|
340
|
-
|
341
|
-
self.
|
342
|
-
self.
|
343
|
-
self.
|
344
|
-
self.
|
345
|
-
self.
|
346
|
-
self.
|
347
|
-
|
348
|
-
|
349
|
-
self.
|
350
|
-
self.
|
351
|
-
self.
|
352
|
-
self.
|
353
|
-
self.
|
354
|
-
self.
|
355
|
-
|
356
|
-
|
357
|
-
self.
|
358
|
-
self.
|
359
|
-
self.
|
360
|
-
self.
|
361
|
-
self.
|
362
|
-
|
363
|
-
|
364
|
-
self.
|
365
|
-
self.
|
366
|
-
self.
|
367
|
-
self.
|
368
|
-
self.
|
369
|
-
|
370
|
-
|
371
|
-
self.
|
372
|
-
self.
|
373
|
-
self.
|
374
|
-
self.
|
375
|
-
self.
|
376
|
-
|
377
|
-
|
378
|
-
self.
|
379
|
-
self.
|
380
|
-
|
381
|
-
self.
|
382
|
-
|
383
|
-
self.
|
384
|
-
self.
|
385
|
-
|
386
|
-
|
387
|
-
self.
|
310
|
+
r = 0
|
311
|
+
self.fps_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
312
|
+
self.fps_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
313
|
+
self.fps_min_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
|
314
|
+
self.fps_min_entry.grid(column=3, row=r, sticky="nes", padx=3, pady=3)
|
315
|
+
self.fps_max_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
|
316
|
+
self.fps_max_entry.grid(column=5, row=r, sticky="nes", padx=3, pady=3)
|
317
|
+
self.fps_disable_cbox.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
|
318
|
+
r += 1
|
319
|
+
self.res_w_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
320
|
+
self.res_w_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
321
|
+
self.res_w_min_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
|
322
|
+
self.res_w_min_entry.grid(column=3, row=r, sticky="nes", padx=3, pady=3)
|
323
|
+
self.res_w_max_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
|
324
|
+
self.res_w_max_entry.grid(column=5, row=r, sticky="nes", padx=3, pady=3)
|
325
|
+
self.res_w_disable_cbox.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
|
326
|
+
r += 1
|
327
|
+
self.res_h_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
328
|
+
self.res_h_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
329
|
+
self.res_h_min_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
|
330
|
+
self.res_h_min_entry.grid(column=3, row=r, sticky="nes", padx=3, pady=3)
|
331
|
+
self.res_h_max_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
|
332
|
+
self.res_h_max_entry.grid(column=5, row=r, sticky="nes", padx=3, pady=3)
|
333
|
+
self.res_h_disable_cbox.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
|
334
|
+
r += 1
|
335
|
+
self.quality_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
336
|
+
self.quality_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
337
|
+
self.quality_min_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
|
338
|
+
self.quality_min_entry.grid(column=3, row=r, sticky="nes", padx=3, pady=3)
|
339
|
+
self.quality_max_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
|
340
|
+
self.quality_max_entry.grid(column=5, row=r, sticky="nes", padx=3, pady=3)
|
341
|
+
self.quality_disable_cbox.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
|
342
|
+
r += 1
|
343
|
+
self.color_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
344
|
+
self.color_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
345
|
+
self.color_min_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
|
346
|
+
self.color_min_entry.grid(column=3, row=r, sticky="nes", padx=3, pady=3)
|
347
|
+
self.color_max_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
|
348
|
+
self.color_max_entry.grid(column=5, row=r, sticky="nes", padx=3, pady=3)
|
349
|
+
self.color_disable_cbox.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
|
350
|
+
r += 1
|
351
|
+
self.duration_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
352
|
+
self.duration_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
353
|
+
self.duration_min_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
|
354
|
+
self.duration_min_entry.grid(column=3, row=r, sticky="nes", padx=3, pady=3)
|
355
|
+
self.duration_max_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
|
356
|
+
self.duration_max_entry.grid(column=5, row=r, sticky="nes", padx=3, pady=3)
|
357
|
+
self.duration_disable_cbox.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
|
358
|
+
r += 1
|
359
|
+
self.size_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
360
|
+
self.size_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
361
|
+
self.img_size_max_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
|
362
|
+
self.img_size_max_entry.grid(column=3, row=r, sticky="nes", padx=3, pady=3)
|
363
|
+
self.vid_size_max_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
|
364
|
+
self.vid_size_max_entry.grid(column=5, row=r, sticky="nes", padx=3, pady=3)
|
365
|
+
self.size_disable_cbox.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
|
366
|
+
r += 1
|
367
|
+
self.format_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
368
|
+
self.format_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
369
|
+
self.img_format_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
|
370
|
+
self.img_format_entry.grid(column=3, row=r, sticky="nes", padx=3, pady=3)
|
371
|
+
self.vid_format_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
|
372
|
+
self.vid_format_entry.grid(column=5, row=r, sticky="nes", padx=3, pady=3)
|
373
|
+
r += 1
|
374
|
+
self.power_help_btn1.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
375
|
+
self.power_lbl1.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
376
|
+
self.fps_power_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
|
377
|
+
self.fps_power_entry.grid(column=3, row=r, sticky="w", padx=3, pady=3)
|
378
|
+
self.res_power_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
|
379
|
+
self.res_power_entry.grid(column=5, row=r, sticky="w", padx=3, pady=3)
|
380
|
+
r += 1
|
381
|
+
self.power_help_btn2.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
382
|
+
self.power_lbl2.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
383
|
+
self.quality_power_lbl.grid(column=2, row=r, sticky="w", padx=3, pady=3)
|
384
|
+
self.quality_power_entry.grid(column=3, row=r, sticky="w", padx=3, pady=3)
|
385
|
+
self.color_power_lbl.grid(column=4, row=r, sticky="w", padx=3, pady=3)
|
386
|
+
self.color_power_entry.grid(column=5, row=r, sticky="w", padx=3, pady=3)
|
387
|
+
r += 1
|
388
|
+
self.padding_percent_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
389
|
+
self.padding_percent_lbl1.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
390
|
+
self.padding_percent_lbl2.grid(column=2, row=r, sticky="w", padx=3, pady=3)
|
391
|
+
self.padding_percent_entry.grid(column=3, row=r, sticky="w", padx=3, pady=3)
|
392
|
+
r += 1
|
393
|
+
self.fake_vid_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
394
|
+
self.fake_vid_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
395
|
+
self.fake_vid_cbox.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
|
396
|
+
r += 1
|
397
|
+
self.bg_color_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
398
|
+
self.bg_color_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
399
|
+
self.bg_color_entry.grid(column=5, row=r, sticky="w", padx=3, pady=3)
|
400
|
+
self.bg_color_btn.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
|
401
|
+
r += 1
|
402
|
+
self.scale_filter_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
403
|
+
self.scale_filter_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
388
404
|
self.scale_filter_opt.grid(
|
389
|
-
column=2, row=
|
405
|
+
column=2, row=r, columnspan=4, sticky="nes", padx=3, pady=3
|
390
406
|
)
|
391
|
-
|
392
|
-
self.quantize_method_help_btn.grid(column=0, row=
|
393
|
-
self.quantize_method_lbl.grid(column=1, row=
|
407
|
+
r += 1
|
408
|
+
self.quantize_method_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
409
|
+
self.quantize_method_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
394
410
|
self.quantize_method_opt.grid(
|
395
|
-
column=2, row=
|
411
|
+
column=2, row=r, columnspan=4, sticky="nes", padx=3, pady=3
|
396
412
|
)
|
397
|
-
|
398
|
-
self.cache_dir_help_btn.grid(column=0, row=
|
399
|
-
self.cache_dir_lbl.grid(column=1, row=
|
413
|
+
r += 1
|
414
|
+
self.cache_dir_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
415
|
+
self.cache_dir_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
400
416
|
self.cache_dir_entry.grid(
|
401
|
-
column=2, row=
|
417
|
+
column=2, row=r, columnspan=4, sticky="nes", padx=3, pady=3
|
402
418
|
)
|
403
|
-
|
404
|
-
self.default_emoji_help_btn.grid(column=0, row=
|
405
|
-
self.default_emoji_lbl.grid(column=1, row=
|
406
|
-
self.default_emoji_dsp.grid(column=6, row=
|
419
|
+
r += 1
|
420
|
+
self.default_emoji_help_btn.grid(column=0, row=r, sticky="w", padx=3, pady=3)
|
421
|
+
self.default_emoji_lbl.grid(column=1, row=r, sticky="w", padx=3, pady=3)
|
422
|
+
self.default_emoji_dsp.grid(column=6, row=r, sticky="nes", padx=3, pady=3)
|
407
423
|
|
408
424
|
# https://stackoverflow.com/questions/43731784/tkinter-canvas-scrollbar-with-grid
|
409
425
|
# Create a frame for the canvas with non-zero row&column weights
|