diff --git a/GTK4/Source/MainWindow.py b/GTK4/Source/MainWindow.py new file mode 100644 index 0000000..403a0d7 --- /dev/null +++ b/GTK4/Source/MainWindow.py @@ -0,0 +1,122 @@ +import gi + +# Запрос требуемых версий библиотек. +gi.require_version("Gtk", "4.0") +gi.require_version("Adw", "1") + +from gi.repository import Gtk, Adw + +# Главное окно. +class MainWindow(Gtk.ApplicationWindow): + + #==========================================================================================# + # >>>>> МЕТОДЫ ВЗАИМОДЕЙСТВИЯ ИНТЕРФЕЙСА <<<<< # + #==========================================================================================# + + # Изменяет статус загрузки. + def __ChangeDownloadingStatus(self): + + # Если нажата кнопка начала загрузки. + if "🌎" in self.__Button_Downloading.get_label(): + # Изменение статуса. + self.__IsDownloading = True + # Изменение текста кнопки. + self.__Button_Downloading.set_label("🟥 Stop") + else: + # Изменение статуса. + self.__IsDownloading = False + # Изменение текста кнопки. + self.__Button_Downloading.set_label("🌎 Start") + + #==========================================================================================# + # >>>>> МЕТОДЫ ГЕНЕРАЦИИ ИНТЕРФЕЙСА <<<<< # + #==========================================================================================# + + # Строит интерфейс. + def __BuildInterface(self): + + # Настройка главного контейнера. + self.__MainBox.set_spacing(20) + self.set_child(self.__MainBox) + + # HeaderBar. + self.Header = Adw.HeaderBar() + self.set_titlebar(self.Header) + self.set_default_size(720, 480) + HeaderLabel = Gtk.Label() + HeaderLabel.set_markup("PornHub Downloader") + self.Header.set_title_widget(HeaderLabel) + + # Построение верхней панели. + self.__BuildUpPanel() + + # Строит верхнюю панель. + def __BuildUpPanel(self): + + # Box: верхняя панель. + UpPanelBox = Gtk.Box.new(Gtk.Orientation.HORIZONTAL, 0) + UpPanelBox.set_spacing(7) + UpPanelBox.set_homogeneous(True) + + # Button: открытие файла. + Button_Open = Gtk.Button(label = "🗃️ Open") + Button_Open.set_margin_start(7) + Button_Open.set_margin_top(7) + + # Button: управление загрузкой. + self.__Button_Downloading = Gtk.Button(label = "🌎 Start") + self.__Button_Downloading.set_margin_end(7) + self.__Button_Downloading.set_margin_top(7) + self.__Button_Downloading.connect("clicked", lambda _: self.__ChangeDownloadingStatus()) + + # Помещение элементов в контейнеры. + UpPanelBox.append(Button_Open) + UpPanelBox.append(self.__Button_Downloading) + self.__MainBox.append(UpPanelBox) + + #==========================================================================================# + # >>>>> МЕТОДЫ <<<<< # + #==========================================================================================# + + # Конструктор. + def __init__(self, *args, **kwargs): + # Наследование конструктора базового класса. + super().__init__(*args, **kwargs) + + #---> Генерация динамических свойств. + #==========================================================================================# + # Состояние: выполняется ли загрузка. + self.__IsDownloading = False + # Главный контейнер. + self.__MainBox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0) + + # Инициализация интерфейса. + self.__BuildInterface() + + # # Контейнер: содержимое. + # ContentBox = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0) + # ContentBox.set_spacing(10) + # # Заголовок ввода. + # Label_Input = Gtk.Label() + # Label_Input.set_markup("Input") + # ContentBox.append(Label_Input) + # # Поле ввода. + # TextView_Input = Gtk.TextView() + # TextView_Input.get_buffer().set_text("\n") + # TextView_Input.set_size_request(1080, 300) + # #ContentBox.append(TextView_Input) + # # Скролл-окно. + # ScrolledWindow_Input = Gtk.ScrolledWindow() + # ScrolledWindow_Input.set_child(TextView_Input) + # ContentBox.append(ScrolledWindow_Input) + # # Заголовок ввода. + # Label_Input = Gtk.Label() + # Label_Input.set_markup("Output") + # ContentBox.append(Label_Input) + # # Поле вывода. + # TextView_Output = Gtk.TextView() + # TextView_Output.get_buffer().set_text("\n") + # TextView_Output.set_editable(False) + # ContentBox.append(TextView_Output) + + # self.__MainBox.append(ContentBox) diff --git a/GTK4/main.py b/GTK4/main.py new file mode 100644 index 0000000..649e435 --- /dev/null +++ b/GTK4/main.py @@ -0,0 +1,34 @@ +import gi + +# Запрос требуемых версий библиотек. +gi.require_version("Gtk", "4.0") +gi.require_version("Adw", "1") + +from gi.repository import Gtk, Adw + +from Source.MainWindow import MainWindow + +import sys + +# Приложение Adwaita. +class MyApp(Adw.Application): + + def __OnActivate(self, Application: Adw.Application): + # Инициализация главного окна. + self.win = MainWindow(application = Application) + # Представление окна. + self.win.present() + + # Конструктор. + def __init__(self, **kwargs): + # Наследование конструктора базового класса. + super().__init__(**kwargs) + # Подключение: при активации приложения. + self.connect("activate", self.__OnActivate) + +# Если точка входа – приложение. +if __name__ == "__main__": + # Создание приложения. + Application = MyApp() + # Выполнение приложения. + exit(Application.run(sys.argv)) \ No newline at end of file diff --git a/Build/build.bat b/Qt/Build/build.bat similarity index 100% rename from Build/build.bat rename to Qt/Build/build.bat diff --git a/Build/metadata.txt b/Qt/Build/metadata.txt similarity index 100% rename from Build/metadata.txt rename to Qt/Build/metadata.txt diff --git a/Source/Locale.py b/Qt/Source/Locale.py similarity index 100% rename from Source/Locale.py rename to Qt/Source/Locale.py diff --git a/Source/MainWindow.py b/Qt/Source/MainWindow.py similarity index 100% rename from Source/MainWindow.py rename to Qt/Source/MainWindow.py diff --git a/Source/QLabelAdvertisement.py b/Qt/Source/QLabelAdvertisement.py similarity index 100% rename from Source/QLabelAdvertisement.py rename to Qt/Source/QLabelAdvertisement.py diff --git a/Source/__init__.py b/Qt/Source/__init__.py similarity index 100% rename from Source/__init__.py rename to Qt/Source/__init__.py diff --git a/Source/yt_dlp.py b/Qt/Source/yt_dlp.py similarity index 100% rename from Source/yt_dlp.py rename to Qt/Source/yt_dlp.py diff --git a/icon.ico b/Qt/icon.ico similarity index 100% rename from icon.ico rename to Qt/icon.ico diff --git a/main.py b/Qt/main.py similarity index 100% rename from main.py rename to Qt/main.py diff --git a/yt-dlp/ffmpeg.exe b/Qt/yt-dlp/ffmpeg.exe similarity index 100% rename from yt-dlp/ffmpeg.exe rename to Qt/yt-dlp/ffmpeg.exe diff --git a/yt-dlp/ffprobe.exe b/Qt/yt-dlp/ffprobe.exe similarity index 100% rename from yt-dlp/ffprobe.exe rename to Qt/yt-dlp/ffprobe.exe diff --git a/yt-dlp/yt-dlp b/Qt/yt-dlp/yt-dlp similarity index 100% rename from yt-dlp/yt-dlp rename to Qt/yt-dlp/yt-dlp