Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os, subprocess, gi
- gi.require_version("Gtk", "3.0")
- from gi.repository import Gtk
- def select_directory(entry):
- try:
- # Команда Zenity для выбора файла
- cmd = ['zenity', '--file-selection', '--file-filter=*.*']
- result = subprocess.run(cmd, check=True, stdout=subprocess.PIPE, text=True)
- directory = result.stdout.strip() # Получаем путь из вывода zenity
- if directory: # Если директория выбрана
- entry.set_text(directory) # Устанавливаем путь в поле ввода
- except FileNotFoundError:
- print("Ошибка: zenity не установлен на системе.")
- except subprocess.CalledProcessError:
- print("Ошибка: выбор директории отменен или произошла ошибка в zenity.")
- def print_directories():
- desktop_file_name = entry_from.get_text() # Имя для .desktop файла
- icon_path = entry_to.get_text() # Путь к директории или иконке
- # desktop_file_name = "/mnt/807EB5FA7EB5E954/python_linux/Find text.sh" # Имя для .desktop файла
- #icon_path = "/mnt/807EB5FA7EB5E954/софт/виртуальная машина/linux must have/python_linux/Project/Fing_glass_icon.svg.png" # Путь к директории или иконке
- # Проверяем, что оба поля заполнены
- if not desktop_file_name or not icon_path:
- print("Ошибка: не указаны имя или путь к директории.")
- return
- icon_directory = os.path.dirname(desktop_file_name) # Извлекаем директорию из пути к программе
- # Удаляем расширение из desktop_file_name
- base_path = os.path.splitext(desktop_file_name)[0]
- # Формируем полный путь для .desktop файла
- desktop_file_path = os.path.join(icon_directory, f"{os.path.basename(base_path)}.desktop")
- # Проверяем расширение desktop_file_name
- if desktop_file_name.endswith('.py'):
- exec_command = f'bash -c \'cd "{os.path.dirname(desktop_file_name)}"; source myenv/bin/activate; python "{desktop_file_name}"\''
- else:
- exec_command = f'"{desktop_file_name}"'
- # Содержимое .desktop файла
- desktop_file_content = f"""[Desktop Entry]
- Name={os.path.basename(base_path)}
- Exec={exec_command}
- Icon={icon_path}
- Terminal=false
- Type=Application"""
- # Записываем содержимое в .desktop файл
- with open(desktop_file_path, 'w') as f:
- f.write(desktop_file_content)
- show_list_id = '''#!/bin/bash\n
- chmod +x "{0}"\n'''.format(desktop_file_path)
- subprocess.run(['bash', '-c', show_list_id])
- # Создаем окно
- window = Gtk.Window(title="Convert Word to PDF")
- window.set_default_size(620, 170)
- window.set_position(Gtk.WindowPosition.CENTER)
- # Основной контейнер
- box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
- box.set_margin_top(15)
- box.set_margin_bottom(15)
- box.set_margin_start(15)
- box.set_margin_end(15)
- window.add(box)
- # Поле "Откуда"
- label_from = Gtk.Label(label="Программа:")
- label_from.set_halign(Gtk.Align.END)
- entry_from = Gtk.Entry()
- entry_from.set_width_chars(50)
- button_from = Gtk.Button(label="Программа")
- button_from.connect("clicked", lambda widget: select_directory(entry_from))
- from_box = Gtk.Box(spacing=10)
- from_box.pack_start(label_from, False, False, 0)
- from_box.pack_start(entry_from, True, True, 0)
- from_box.pack_start(button_from, False, False, 0)
- box.pack_start(from_box, False, False, 0)
- # Поле "Куда"
- label_to = Gtk.Label(label="Ярлык")
- label_to.set_halign(Gtk.Align.END)
- entry_to = Gtk.Entry()
- entry_to.set_width_chars(50)
- button_to = Gtk.Button(label="Ярлык")
- button_to.connect("clicked", lambda widget: select_directory(entry_to))
- to_box = Gtk.Box(spacing=10)
- to_box.pack_start(label_to, False, False, 0)
- to_box.pack_start(entry_to, True, True, 0)
- to_box.pack_start(button_to, False, False, 0)
- box.pack_start(to_box, False, False, 0)
- # Кнопка "ОК"
- button_ok = Gtk.Button(label="ОК")
- button_ok.connect("clicked", lambda widget: print_directories())
- ok_box = Gtk.Box()
- ok_box.pack_start(button_ok, True, False, 0)
- box.pack_start(ok_box, False, False, 10)
- # Обработка закрытия окна
- window.connect("destroy", Gtk.main_quit)
- # Показываем окно
- window.show_all()
- # Запуск приложения
- Gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement