Во второй части мы будет усердно трудиться над тем, чтобы наш питоновский скрипт обрёл лицо а именно получил графическую оболочку (сокращённо GUI), в этом нам поможет модуль tkinter идущий в комплекте с питоном. Первую часть можно посмотреть ТУТ. И так приступим Создаём экземпляр класса Создаём экземпляр класса Tk импортированного ранее из модуля tkiter сокращённо tk. Указываем геометрию окна и заголовок root = tk.Tk() root.geometry('280x550+350+50') # создаём геометрию окна root.title('TG: @listopadd') # не трогай бл..ть!!! Python root = tk.Tk() root.geometry('280x550+350+50') # создаём геометрию окна root.title('TG: @listopadd') # не трогай бл..ть!!! Лейблы и поля ввода Затем создаём два информационных лейбла, их мы поместим поверх окон ввода. Дальше идут два поля ввода, биндим каждый из них на нажатие правой кнопки мыши для корректной работы буфера (об этом говорилось в первой части) В последней строке вводим содержимое файла group.txt который мы так же создали в первой части. 1.0 - координаты вставки, 1-ая строка, 0 индекс label = tk.Label(text='Введите логин и пароль через разделитель : ') label_2 = tk.Label(text='Введите список id групп') input_password = tk.Entry(width=35) # однострочный ввод input_password.bind("<ButtonPress-3>", touch_password) # биндим на нажатие правой кнопки мыши input_list_group = tk.Text(height=5) # многострочный ввод с высотой 5 символов input_list_group.bind("<ButtonPress-3>", touch_list_group) # биндим как и с первым вводом input_list_group.insert(1.0, group) # вставляем содержимое переменной group Python label = tk.Label(text='Введите логин и пароль через разделитель : ') label_2 = tk.Label(text='Введите список id групп') input_password = tk.Entry(width=35) # однострочный ввод input_password.bind("<ButtonPress-3>", touch_password) # биндим на нажатие правой кнопки мыши input_list_group = tk.Text(height=5) # многострочный ввод с высотой 5 символов input_list_group.bind("<ButtonPress-3>", touch_list_group) # биндим как и с первым вводом input_list_group.insert(1.0, group) # вставляем содержимое переменной group Лейблы и поля №2 С полями текст и вложение проделываем то же самое label_text = tk.Label(text='Введите текст рассылки ') input_text = tk.Text(height=2) input_text.bind("<ButtonPress-3>", touch_text) label_photo = tk.Label(text='Вложение photo-123456_123456') input_photo = tk.Entry(width=35) input_photo.bind("<ButtonPress-3>", touch_photo) Python label_text = tk.Label(text='Введите текст рассылки ') input_text = tk.Text(height=2) input_text.bind("<ButtonPress-3>", touch_text) label_photo = tk.Label(text='Вложение photo-123456_123456') input_photo = tk.Entry(width=35) input_photo.bind("<ButtonPress-3>", touch_photo) Кнопки Чтобы кнопки были в ряд, мы создаём невидимую рамку и передаём её в атрибут master= каждого экземпляра кнопки. Во втором элементе мы добавили горизонтальный паддинг чтобы кнопки не слиплись frame_btn = tk.Frame() # создаём невидимую рамочку чтобы объеденить элементы btn_start = tk.Button(master=frame_btn, text='Старт', command=start_action) # создаём кнопку, первым параметром указываем на родителя т.е. на рамку btn_stop = tk.Button(master=frame_btn, text='Стоп', padx=4, command=stop_action) # то же самое но ещё указываем горизонтальный отступ в 4 пикселя с обеих сторон label_logs = tk.Label(text='****') # надпись ЛОГ input_logs = tk.Text(height=11, wrap=tk.WORD) # большое поле вывода лога Python frame_btn = tk.Frame() # создаём невидимую рамочку чтобы объеденить элементы btn_start = tk.Button(master=frame_btn, text='Старт', command=start_action) # создаём кнопку, первым параметром указываем на родителя т.е. на рамку btn_stop = tk.Button(master=frame_btn, text='Стоп', padx=4, command=stop_action) # то же самое но ещё указываем горизонтальный отступ в 4 пикселя с обеих сторон label_logs = tk.Label(text='****') # надпись ЛОГ input_logs = tk.Text(height=11, wrap=tk.WORD) # большое поле вывода лога Расстановка элементов Метод pack() располагает элементы по центру окна друг под другом, это очень удобно для небольших GUI вроде нашего. Указываем вертикальные паддинги чтобы элементы не слиплись, в кнопках указываем side LEFT, RIGHT, тем самым говорим к какой из сторон должен прижаться каждый из элементов внутри нашей невидимой рамки. В последней строке запускаем на прослушивание событий (нажатие кнопок) наш экземпляр класса tk. label.pack(pady=7) input_password.pack() label_2.pack(pady=7) input_list_group.pack(padx=6) label_text.pack(pady=7) input_text.pack(padx=6) label_photo.pack(pady=7) input_photo.pack() frame_btn.pack(pady=5) btn_start.pack(side=tk.LEFT, pady=5, padx=5, ipadx=8) btn_stop.pack(side=tk.RIGHT, pady=5, padx=5, ipadx=8) label_logs.pack(pady=7) input_logs.pack(padx=6) root.mainloop() Python label.pack(pady=7) input_password.pack() label_2.pack(pady=7) input_list_group.pack(padx=6) label_text.pack(pady=7) input_text.pack(padx=6) label_photo.pack(pady=7) input_photo.pack() frame_btn.pack(pady=5) btn_start.pack(side=tk.LEFT, pady=5, padx=5, ipadx=8) btn_stop.pack(side=tk.RIGHT, pady=5, padx=5, ipadx=8) label_logs.pack(pady=7) input_logs.pack(padx=6) root.mainloop() Делаем пробный запуск =) 3... 2... 1... Поехали!!!! Всё работает! Для большей эффективности вы можетевыставить задержки по собственному желанию.Весь проект доступен по ссылке на гитхаб. Ссылка на первую часть.Всем годного трафика и профитов =))