Ответы пользователя по тегу Python
  • Запускаю скрипт, а в вывод выводит слово "Python", и так много раз, что делать?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    Я так и не понял, чего ты хотел, но просто убери "python3 " в 15-ой строке; такое явное указание на версию пайтона уже лишнее, запускай свой 'main.py' без него!
    from time import sleep
    import os
    
    process_name = 'main.py'
    
    def process_exists():
        call = 'ps ax | grep %s' % process_name
        if not process_name in call:
            return True
    
    while True:
        try:
            a = process_exists()
            if a != True :
                os.system(process_name)
            sleep(2)
        except KeyboardInterrupt:
            break

    OR
    from time import sleep
    import os
    
    def process_exists():
        if not 'main.py' in 'ps ax | grep main.py':
            return True
    
    while True:
        try:
            if process_exists() != True :
                os.system('main.py')
            sleep(2)
        except KeyboardInterrupt:
            break

    Этот код будет просто проверять наличие файла "main.py" и раз в 2 секунды выполнять его...
    Ответ написан
  • Python selenium, как указать путь относительно скрипта?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    driver = webdriver.Chrome('folder\chromedriver.exe')
    #or
    driver = webdriver.Chrome(r'folder/chromedriver.exe')
    #or
    driver = webdriver.Chrome('chromedriver.exe')
    Ответ написан
    Комментировать
  • Можно ли менять фото при нажатии на Inline кнопку?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    @bot.message_handler(commands=["editphoto"])
    def editfoto(message):
    	try:
    		kbi = telebot.types.InlineKeyboardMarkup()
    		btn = telebot.types.InlineKeyboardButton(text="Кнопка", callback_data='btn1')
    		kbi.add(btn)    #!		
    		foto1 = open('ozerx/botsend/photo1.png', 'rb')
    		bot.send_photo(message.chat.id, foto1, caption = "caption", reply_markup = kbi)
    	except:	
    		bot.send_message(message.chat.id, "Бот не смог отправить фото!")
    
    @bot.callback_query_handler(func=lambda call: True)
    def clbk(call):	
    	if call.data == 'btn1':
    		try:
    			foto2 = open('ozerx/botsend/photo2.png', 'rb')
    			bot.edit_message_media(media=telebot.types.InputMedia(type='photo', media=foto2, caption = "noitpac"), chat_id=call.message.chat.id, message_id=call.message.message_id)		
    		except:	
    			bot.send_message(call.message.chat.id, "Бот не смог изменить фото!")
    Ответ написан
    Комментировать
  • Как перезагрузить телеграмм бот?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    import os #импортируем модуль "os"
    
    @bot.message_handler(commands=["restart"]) #вызов по команде /restart; можно сделать и на кнопку
    def restart(message):
    	pid = str(os.getpid()) #получаем ProcessID запущенного бота
    	restarter = open('restarter.bat', 'w') #открываем/создаем батник
    	restarter.write('Taskkill /PID ' + pid + ' /F\nTIMEOUT /T 5 /NOBREAK\ncd C:\\Users\\smp\\Desktop\\SMP\\\nsmp.py') #записываем скрипт в батник		
    	restarter.close() #закрываем отредактированный батник
    	os.system('C:/Users/smp/Desktop/SMP/restarter.bat') #запускаем наш батник
    Ответ написан
  • Команда /stop для бота?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    import os
    
    @bot.message_handler(commands=["stop"])
    def stop(message):
    	if message.from_user.username == cfg.Father:	
    		pid = str(os.getpid())
    		stoper = open('ozerx/stoper.bat', 'w')
    		stoper.write("Taskkill /PID " + pid + " /F")
    		stoper.close()
    		os.system('C:/Users/smp/Desktop/SMP/ozerx/stoper.bat')
    	else:
    		bot.send_message(message.chat.id, "Ты не Создатель бота; у тебя нет админ-прав, проваливай!")
    Ответ написан
  • Как исправить ошибку "name 'message' is not defined" в Телеграм Боте?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    Ту вообще многое неправильно. Вот так будет лучше:
    # -*- coding: utf-8 -*-
    #^^^Если используешь русский текст указывай кодировку на всякий случай.
    
    import telebot
    from telebot import types
    
    token = 'здесьможетбытьвашатокешка'
    bot = telebot.TeleBot(token)
    
    @bot.message_handler(commands=['start'])
    def start_message(message):
    	bot.send_message(message.chat.id, 'Меня зовут бот. Чем могу вам помочь?')	#Здесь не надо отсылать клавиатуру, тем более ту которая не создана!
    
    @bot.message_handler(content_types=['text'])
    def get_text_messages(message):
    	kb = types.ReplyKeyboardMarkup()
    	kb.row('Калькулятор','Расписание')
    	kb.row('О нас','Помощь')
    	kb.row('Обратная связь')
    	bot.send_message(message.chat.id, 'К сожалению я еще не умею читать текст. Воспользуйтесь главным меню:', reply_markup=kb)	#Отправка меню
    	#bot.send_message(message.chat.id, "Выберите пункт меню:", reply_markup=markup) - Эта строка вообще лишняя, главное меню отправляется строкой выше.
    
    bot.polling(none_stop=True, interval=0)
    Ответ написан
    Комментировать
  • Как в боте telegram вызвать анимацию конфетти?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    Это является встроенной функцией при ответах на опросниках, так что на данный момент никак. Официальный ответ с их сайта:5f02b524c64b4746567935.png
    Ответ написан
    Комментировать
  • InlineKeyboardMarkup ReplyKeyboardMarkup как сделать чтобы появились после одного сообщения?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    Дело было вечером - делать было нечего. Разнёс по модулям, но разберёшься (всё в одной директории). Кое где переделал, кое где добавил english. Главное следи за структурой сперва callback на inline, потом на reply кнопки. Вместо картинки вмазал стикер, ну это так, что под рукой было.
    P.S. Токен не забудь свой вставить в cfg.

    Main.py (Главный модуль)
    # -*- coding: utf-8 -*-
    import telebot, cfg, kb, lg
    from telebot import types
    from requests import get
    
    bot = telebot.TeleBot(cfg.token)
    
    @bot.message_handler(commands=['start'])
    def start(message):
    	bot.send_sticker(message.chat.id, "CAACAgUAAxkBAAIHg18CC9ooVxBjT62AL3MZT_liQgUtAAKJAwAC6QrIA9kfvAIjYHAXGgQ")	#bot.send_photo(message.chat.id,open("C:\\ЕМБ.jpg","rb"))
    	bot.send_message(message.chat.id, lg.hello1u + message.from_user.first_name + lg.hello2u)
    	bot.send_message(message.chat.id, lg.hello1e + message.from_user.first_name + lg.hello2e, reply_markup=kb.ikb1)	
    
    @bot.callback_query_handler(func=lambda c:True)
    def cbinline(c):
    	if c.data == lg.ukr:
    		bot.send_message(c.message.chat.id, lg.razdelu, reply_markup=kb.ikb2u)	
    		bot.send_message(c.message.chat.id, lg.umusthave ,reply_markup=kb.rkbu)	
    
    	elif c.data == lg.eng:
    		bot.send_message(c.message.chat.id, lg.razdele, reply_markup=kb.ikb2e)	
    		bot.send_message(c.message.chat.id, lg.emusthave ,reply_markup=kb.rkbe)
    		
    	elif c.data == lg.ibtn1u:
    		bot.send_message(c.message.chat.id, lg.txt1u)
    
    	elif c.data == lg.ibtn2u:
    		bot.send_message(c.message.chat.id, lg.txt2u)
    
    	elif c.data == lg.ibtn3u:
    		bot.send_message(c.message.chat.id, lg.txt3u)	
    
    	elif c.data == lg.ibtn4u:
    		bot.send_message(c.message.chat.id, lg.txt4u)
    
    	elif c.data == lg.ibtn5u:	
    		bot.send_message(c.message.chat.id, lg.txt5u)
    
    	elif c.data == lg.ibtn1e:
    		bot.send_message(c.message.chat.id, lg.txt1e)
    		
    	elif c.data == lg.ibtn2e:
    		bot.send_message(c.message.chat.id, lg.txt2e)
    		
    	elif c.data == lg.ibtn3e:
    		bot.send_message(c.message.chat.id, lg.txt3e)
    		
    	elif c.data == lg.ibtn4e:
    		bot.send_message(c.message.chat.id, lg.txt4e)
    		
    	elif c.data == lg.ibtn5e:
    		bot.send_message(c.message.chat.id, lg.txt5e)
    		
    @bot.message_handler(content_types=['text'])
    def cbreply(message):	
    	if message.text == lg.rbtn1u:
    		bot.send_message(message.chat.id, lg.hello1u + message.from_user.first_name + lg.hello2u)
    		bot.send_message(message.chat.id, lg.hello1e + message.from_user.first_name + lg.hello2e, reply_markup=kb.ikb1)
    
    	elif message.text == lg.rbtn2u:
    		bot.send_message(message.chat.id, lg.endu, reply_markup=kb.kbsu)	
    
    	elif message.text == lg.rbtn1e:
    		bot.send_message(message.chat.id, lg.hello1u + message.from_user.first_name + lg.hello2u)
    		bot.send_message(message.chat.id, lg.hello1e + message.from_user.first_name + lg.hello2e, reply_markup=kb.ikb1)
    		
    	elif message.text == lg.rbtn2e:
    		bot.send_message(message.chat.id, lg.ende, reply_markup=kb.kbse)	
    
    if __name__ == '__main__':
    	bot.polling(none_stop=True)


    Cfg.py (Модуль конфига)
    token = 'цыфры:буквы'
    url = "https://kmu.u.ua/oplata/"


    Kb.py (Модуль клавиатур/кнопок)
    # -*- coding: utf-8 -*-
    import telebot, lg, cfg
    from telebot import types
    
    #Это сокращения клавитарских выражений
    tikm = types.InlineKeyboardMarkup
    trkm = types.ReplyKeyboardMarkup
    tikb = types.InlineKeyboardButton
    
    #start
    ikb1 = tikm()
    ibtn1 = tikb(text=lg.ukr, callback_data=lg.ukr)
    ibtn2 = tikb(text=lg.eng, callback_data=lg.eng)
    ikb1.add(ibtn1, ibtn2)
    
    #Ukr main kb
    ikb2u = tikm()
    ibtn1 = tikb(text=lg.ibtn1u, callback_data=lg.ibtn1u)
    ibtn2 = tikb(text=lg.ibtn2u, callback_data=lg.ibtn2u)
    ibtn3 = tikb(text=lg.ibtn3u, callback_data=lg.ibtn3u)
    ibtn4 = tikb(text=lg.ibtn4u, callback_data=lg.ibtn4u)
    ibtn5 = tikb(text=lg.ibtn5u, url=cfg.url)
    ikb2u.add(ibtn1, ibtn2)
    ikb2u.add(ibtn3, ibtn4)
    ikb2u.add(ibtn5)
    
    #Eng main kb
    ikb2e = tikm()
    ibtn1 = tikb(text=lg.ibtn1e, callback_data=lg.ibtn1e)
    ibtn2 = tikb(text=lg.ibtn2e, callback_data=lg.ibtn2e)
    ibtn3 = tikb(text=lg.ibtn3e, callback_data=lg.ibtn3e)
    ibtn4 = tikb(text=lg.ibtn4e, callback_data=lg.ibtn4e)
    ibtn5 = tikb(text=lg.ibtn5e, url=cfg.url)
    ikb2e.add(ibtn1, ibtn2)
    ikb2e.add(ibtn3, ibtn4)
    ikb2e.add(ibtn5)
    
    #Tostart/toend
    rkbu = trkm(True, True, row_width=1)
    rkbu.add(lg.rbtn1u, lg.rbtn2u)
    
    rkbe = trkm(True, True, row_width=1)
    rkbe.add(lg.rbtn1e, lg.rbtn2e)
    
    #End keyboard
    kbsu = trkm(True, True, row_width=1)
    kbsu.add(lg.rbtn1u)
    
    kbse = trkm(True, True, row_width=1)
    kbse.add(lg.rbtn1e)


    Lg.py (Модуль текста)
    #Buttons
    ukr = "Українська"
    eng = "English"
    
    ibtn1u = "Вступ"
    ibtn2u = "Післядипломна освіта"
    ibtn3u = "Студенту"
    ibtn4u = "Довідник контактів"
    ibtn5u = "Реквізити-Оплата"
    
    ibtn1e = "Introduction"
    ibtn2e = "Postgraduate education"
    ibtn3e = "To student"
    ibtn4e = "Contacts Directory"
    ibtn5e = "Details-Payment"
    
    rbtn1u = "Початок"
    rbtn2u = "Кінець"
    
    rbtn1e = "To the begining"
    rbtn2e = "To the end"
    
    #Text
    hello1u = "Доброго дня "
    hello2u = ", Я бот-консультант Київського медичного Університету. Радий Вас вітати.Оберіть будь ласка мову спілкування.\n"
    hello1e = "Good day "
    hello2e = "I am a chat bot of Kyiv Medical University. Glad to welcome you. Please choose the language of communication."
    
    razdelu = "Оберіть будь ласка розділ який Вас цікавить."
    razdele = "Please select the section that interests you."
    
    umusthave = "Також ви можете перемещатся за допомогою кнопок внизу."
    emusthave = "You can also navigate using the buttons below."
    
    txt1u = "Это текст после нажатия 'Вступ'"
    txt2u = "Это текст после нажатия 'Післядипломна освіта'"
    txt3u = "Это текст после нажатия 'Студенту'"
    txt4u = "Это текст после нажатия 'Довідник контактів'"
    txt5u = "Это текст после нажатия 'Реквізити-Оплата'"
    
    txt1e = "Это текст после нажатия 'Introduction'"
    txt2e = "Это текст после нажатия 'Postgraduate education'"
    txt3e = "Это текст после нажатия 'To student'"
    txt4e = "Это текст после нажатия 'Contacts Directory'"
    txt5e = "Это текст после нажатия 'Details-Payment'"
    
    endu = "Вы попали в конец!"
    ende = "You in the end!"
    Ответ написан
    Комментировать
  • Как сделать очищение после каждого нажатия кнопки?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    Если добавить e2.delete(first=0,last=100) вначале функции всё удаляется!

    def converter():
        e2.delete(first=0,last=100)
        a = kilometry.get()
        a = float(a)
        result = float(a * 0.621371)
    
        e.delete(first=0,last=100)
        e2.insert(0, str(result) + " миль")


    Первое поле вы очищаете, в чём проблема сделать тоже самое со вторым?)
    Ответ написан
    Комментировать
  • Почему на кнопке, созданной с помощью tkinter на Python, не появляется изображение?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    Добавьте album_button.image = image перед размещением кнопки

    ***
        for album_s in albums:
            image = ImageTk.PhotoImage(file = str(album_s))
            album_button = Button(root,
                                  image = image,
                                  width = 120, height = 120,
                                  command = lambda: print('click'))
            album_button.image = image
            album_button.pack()
    create_albums()
    ***
    Ответ написан
    1 комментарий
  • Как на python создать файл?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    Комментировать
  • Как удалять объекты в canvas python?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    Готово!

    # -*- coding: utf8 -*-
    from tkinter import*
    import tkinter.ttk as ttk
    
    root = Tk()
    
    canv = Canvas(root, width=120, height=50)
    canv.pack()
    
    def click1(self):
    	canv.delete(z1)
    
    def click2(self):
    	canv.delete(z2)
    
    def click3(self):
    	canv.delete(z3)
    	
    z1 = canv.create_text(20, 20, anchor=W, font=("Purisa", 20), text = 1, tag=1)
    z2 = canv.create_text(50, 20, anchor=W, font=("Purisa", 20), text = 2, tag=2)
    z3 = canv.create_text(80, 20, anchor=W, font=("Purisa", 20), text = 3, tag=3)
    
    canv.tag_bind(z1, '<Button-1>', click1)
    canv.tag_bind(z2, '<Button-1>', click2)
    canv.tag_bind(z3, '<Button-1>', click3)
    
    root.mainloop()


    Но, если вам нужно что-то вроде игры на основе рандома то вот:
    # -*- coding: utf8 -*-
    from tkinter import*
    import tkinter.ttk as ttk
    import random
    
    root = Tk()
    root.geometry("500x500")
    
    def z0():
    	btn.destroy()
    	canv = Canvas(root, width=500, height=500)
    	canv.pack()
    
    	def click(self):
    		global rin		
    		global num
    		canv.delete(num)
    
    		dbrin = rin
    		print(dbrin)
    
    		z1()
    		
    	def z1():
    		global rin
    		global num
    		rin = random.SystemRandom().choice(["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"])
    		xy = random.SystemRandom().choice(["50", "100", "150", "200", "250", "300", "350", "400", "450"])
    		yx = random.SystemRandom().choice(["450", "400", "350", "300", "250", "200", "150", "100", "50"])
    
    		x1 = xy
    		y1 = yx
    		
    		num = canv.create_text(x1, y1, anchor=W, font=("Purisa", 20), text = rin)
    		canv.tag_bind(num, '<Button-1>', click)
    
    	z1()
    
    btn = Button(root, text="START", width=10, height=5, fg="black", command=z0)
    btn.pack()
    
    root.mainloop()
    Ответ написан
    Комментировать
  • Как отправить данные из дочернего окна в основное?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    Прошу Вас!

    Считать текст с Entry можно методом ".get()"
    Я не совсем понял куда должен отправиться введённый текст, так что сделал замену кнопки "Исполнитель" введённым текстом. Вы можете добавлять а не заменять кнопку.

    з.ы. Возможно global использовано излишне или чересчур;)

    # -*- coding: utf8 -*-
    from tkinter import*
    import tkinter.ttk as ttk
    
    def teget():
    	global Toc_entry
    	global btn2
    	btn2.destroy()
    	btn2 = Button(root, text = Toc_entry.get())
    	#btn2.bind('<Button-1>', ???)
    	btn2.pack()
    	global children	
    	children.destroy()
    
    def Table_of_contents(event):
    	global children
    	children = Toplevel(root)
    	children.title("Оглавление")
        
    	global Toc_entry
    	Toc_entry = Entry(children)
    	Toc_entry.pack()
    
    	Toc_e_btn = Button(children, text = "Принять", command=teget)
    	Toc_e_btn.pack()
    
    	
    root = Tk()
    
    root.title("Титульный лист")
    #root.state('zoomed')
    
    btn1 = Button(root, text = "Оглавление")
    btn1.bind('<Button-1>', Table_of_contents)
    btn1.pack()
    
    global btn2
    btn2 = Button(root, text = "Исполнитель")
    #btn2.bind('<Button-1>', ???)
    btn2.pack()
    
    root.mainloop()
    Ответ написан
    Комментировать
  • Как вызвать функцию?

    SuckMyPython
    @SuckMyPython Автор вопроса
    matrix.polling(none_stop=True)
    Короче пардон за глупый вопрос! Может так и не правильно, но я просто задал значение для переменной event.
    Если существуют более изящные и грамотные решения прошу кинуть весточку=)

    # -*- coding: utf8 -*-
    from tkinter import *
    import tkinter.ttk as ttk
    from PIL import Image, ImageTk 
    
    root = Tk()
    root.title("LH")
    
    c = Canvas(root, width=500, height=500)
    c.pack()
    
    event = 123
    imag1 = 0
    imag2 = 0
    
    def p1(event):
    	c.delete(imag2)
    	image1 = Image.open("C://1.png")
    	photo1 = ImageTk.PhotoImage(image1) 
    	c.image = photo1
    	imag1 = c.create_image(200, 250, image=photo1)	
    	c.tag_bind(imag1, '<Button-1>', p2)
    
    	
    def p2(event):
    	c.delete(imag1)
    	image2 = Image.open("C://2.png")	
    	photo2 = ImageTk.PhotoImage(image2) 
    	c.image = photo2	
    	imag2 = c.create_image(200, 250, image=photo2)	
    	c.tag_bind(imag2, '<Button-1>', p1)
    
    p1(event)
    root.mainloop()
    Ответ написан
    Комментировать
  • Как бота подключить через прокси на python к телеграм?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    Инфа 100% этот метод работает с приватным прокси:

    import telebot
    from telebot import apihelper

    TOKEN = '0000000:xxxxxxxxxxxxxxxxxxxxxxx'
    PROXY = 'login:password@ip:port' #(Логин и пароль от купленного прокси)

    apihelper.proxy = {'https':'socks5://' + PROXY}
    bot = telebot.TeleBot(TOKEN)

    ======================
    P.S. Если выдаёт ошибку иногда помогает вместо 'socks5://' заменить на 'socks5h://'

    И да самое главное - прокси должен быть переведёт на тип "SOCKS5"(делается в админке прокси, по крайней мере на proxy6.net), через тип "HTTPS" бот работать не будет.
    Ответ написан
    1 комментарий
  • Как сделать многоуровневое меню телеграм бота ( inline - callback) на python?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    Надо добавить в bot.send_message необязательный параметр reply_markup=key (т.е. помимо отправления текста бот создаст меню), предварительно указав необходимую информацию.

    Вот пример на скорую руку (изменение 3 кнопки):

    @bot.message_handler(commands=["start"])
    def inline(message):
    	key = types.InlineKeyboardMarkup()
    	but_1 = types.InlineKeyboardButton(text="NumberOne", callback_data="NumberOne")
    	but_2 = types.InlineKeyboardButton(text="NumberTwo", callback_data="NumberTwo")
    	but_3 = types.InlineKeyboardButton(text="NumberTree", callback_data="NumberTree")
    	key.add(but_1, but_2, but_3)
    	bot.send_message(message.chat.id, "ВЫБЕРИТЕ КНОПКУ", reply_markup=key)
    
    @bot.callback_query_handler(func=lambda c:True)
    def inline(c):
    	if c.data == 'NumberOne':
    		bot.send_message(c.message.chat.id, 'Это кнопка 1')
    	if c.data == 'NumberTwo':
    		bot.send_message(c.message.chat.id, 'Это кнопка 2')
    	if c.data == 'NumberTree':
    		key = types.InlineKeyboardMarkup()
    		but_1 = types.InlineKeyboardButton(text="NumberOne", callback_data="NumberOne")
    		but_2 = types.InlineKeyboardButton(text="NumberTwo", callback_data="NumberTwo")
    		but_3 = types.InlineKeyboardButton(text="NumberTree", callback_data="NumberTree")
    		key.add(but_1, but_2, but_3)
    		bot.send_message(c.message.chat.id, 'Это кнопка 3', reply_markup=key)
    Ответ написан
    2 комментария