Advertisement
egor230

Create link destop

Mar 2nd, 2025
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.66 KB | Source Code | 0 0
  1. import os, subprocess, gi
  2. gi.require_version("Gtk", "3.0")
  3. from gi.repository import Gtk
  4.  
  5. def select_directory(entry):
  6.     try:
  7.  
  8.         # Команда Zenity для выбора файла
  9.         cmd = ['zenity', '--file-selection', '--file-filter=*.*']
  10.         result = subprocess.run(cmd, check=True, stdout=subprocess.PIPE, text=True)
  11.         directory = result.stdout.strip()  # Получаем путь из вывода zenity
  12.         if directory:  # Если директория выбрана
  13.             entry.set_text(directory)  # Устанавливаем путь в поле ввода
  14.     except FileNotFoundError:
  15.         print("Ошибка: zenity не установлен на системе.")
  16.     except subprocess.CalledProcessError:
  17.         print("Ошибка: выбор директории отменен или произошла ошибка в zenity.")
  18.  
  19. def print_directories():
  20.     desktop_file_name = entry_from.get_text()  # Имя для .desktop файла
  21.     icon_path = entry_to.get_text()  # Путь к директории или иконке
  22.     # desktop_file_name = "/mnt/807EB5FA7EB5E954/python_linux/Find text.sh"  # Имя для .desktop файла
  23.     #icon_path = "/mnt/807EB5FA7EB5E954/софт/виртуальная машина/linux must have/python_linux/Project/Fing_glass_icon.svg.png" # Путь к директории или иконке
  24.  
  25.     # Проверяем, что оба поля заполнены
  26.     if not desktop_file_name or not icon_path:
  27.         print("Ошибка: не указаны имя или путь к директории.")
  28.         return
  29.     icon_directory = os.path.dirname(desktop_file_name)    # Извлекаем директорию из пути к программе
  30.  
  31.     # Удаляем расширение из desktop_file_name
  32.     base_path = os.path.splitext(desktop_file_name)[0]
  33.  
  34.     # Формируем полный путь для .desktop файла
  35.     desktop_file_path = os.path.join(icon_directory, f"{os.path.basename(base_path)}.desktop")
  36.     # Проверяем расширение desktop_file_name
  37.     if desktop_file_name.endswith('.py'):
  38.         exec_command = f'bash -c \'cd "{os.path.dirname(desktop_file_name)}"; source myenv/bin/activate; python "{desktop_file_name}"\''
  39.     else:
  40.         exec_command = f'"{desktop_file_name}"'
  41.  
  42.     # Содержимое .desktop файла
  43.     desktop_file_content = f"""[Desktop Entry]
  44.    Name={os.path.basename(base_path)}
  45.    Exec={exec_command}
  46.    Icon={icon_path}
  47.    Terminal=false
  48.    Type=Application"""
  49.  
  50.     # Записываем содержимое в .desktop файл
  51.     with open(desktop_file_path, 'w') as f:
  52.         f.write(desktop_file_content)
  53.  
  54.     show_list_id = '''#!/bin/bash\n
  55.    chmod +x "{0}"\n'''.format(desktop_file_path)
  56.     subprocess.run(['bash', '-c', show_list_id])
  57.  
  58. # Создаем окно
  59. window = Gtk.Window(title="Convert Word to PDF")
  60. window.set_default_size(620, 170)
  61. window.set_position(Gtk.WindowPosition.CENTER)
  62.  
  63. # Основной контейнер
  64. box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
  65. box.set_margin_top(15)
  66. box.set_margin_bottom(15)
  67. box.set_margin_start(15)
  68. box.set_margin_end(15)
  69. window.add(box)
  70.  
  71. # Поле "Откуда"
  72. label_from = Gtk.Label(label="Программа:")
  73. label_from.set_halign(Gtk.Align.END)
  74. entry_from = Gtk.Entry()
  75. entry_from.set_width_chars(50)
  76. button_from = Gtk.Button(label="Программа")
  77. button_from.connect("clicked", lambda widget: select_directory(entry_from))
  78.  
  79. from_box = Gtk.Box(spacing=10)
  80. from_box.pack_start(label_from, False, False, 0)
  81. from_box.pack_start(entry_from, True, True, 0)
  82. from_box.pack_start(button_from, False, False, 0)
  83. box.pack_start(from_box, False, False, 0)
  84.  
  85. # Поле "Куда"
  86. label_to = Gtk.Label(label="Ярлык")
  87. label_to.set_halign(Gtk.Align.END)
  88. entry_to = Gtk.Entry()
  89. entry_to.set_width_chars(50)
  90. button_to = Gtk.Button(label="Ярлык")
  91. button_to.connect("clicked", lambda widget: select_directory(entry_to))
  92.  
  93. to_box = Gtk.Box(spacing=10)
  94. to_box.pack_start(label_to, False, False, 0)
  95. to_box.pack_start(entry_to, True, True, 0)
  96. to_box.pack_start(button_to, False, False, 0)
  97. box.pack_start(to_box, False, False, 0)
  98.  
  99. # Кнопка "ОК"
  100. button_ok = Gtk.Button(label="ОК")
  101. button_ok.connect("clicked", lambda widget: print_directories())
  102. ok_box = Gtk.Box()
  103. ok_box.pack_start(button_ok, True, False, 0)
  104. box.pack_start(ok_box, False, False, 10)
  105.  
  106. # Обработка закрытия окна
  107. window.connect("destroy", Gtk.main_quit)
  108.  
  109. # Показываем окно
  110. window.show_all()
  111.  
  112. # Запуск приложения
  113. Gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement