Ответы пользователя по тегу Python
  • Почему Pygame не воспроизводит mp3 без display?

    TomasHuk
    @TomasHuk
    Я когда-то использовал такой код (файл sound/sound.py):
    import pygame, sys
    def play(song):
        pygame.mixer.music.load(song)
        pygame.mixer.music.play()
        while pygame.mixer.music.get_busy():
                pos = pygame.mixer.music.get_pos()/ 1000
    
    if __name__=='__main__':
        if len(sys.argv) > 1:
            song = sys.argv[1]
        else:
            song = 'file.mp3'
    
        pygame.mixer.init(22050, -16, 2, 2048)
        pygame.mixer.music.set_volume(2.0)
        play(song)
        pygame.quit()

    Вызывал из другого скрипта (файл play_song.py):
    def run(song):
        import os, sys
        pypath = sys.executable
        os.spawnv(os.P_DETACH, pypath, ('python', 'sound/sound.py', song))
    
    if __name__=='__main__':
        song = 'sound/file.mp3'
        run(song)

    Запуск одной строчкой с третьего скрипта:
    import play_song
    play_song.run('sound/first-file.mp3')

    Воспроизводит mp3 без окна, в виде отдельного процесса.
    Ответ написан
    2 комментария
  • Что не так с программой?

    TomasHuk
    @TomasHuk
    У меня тоже была такая проблема. И осталась.
    На борту Win7 и python 3.3. Ваша программа запускается, работает, но не пишет в лог символы кириллицы. Английские буквы и цифры пишет нормально.
    Был похожий вопрос. Посмотрите мой ответ там.
    Ответ написан
    Комментировать
  • Как правильно использовать отступы в python?

    TomasHuk
    @TomasHuk
    Я бы переписал так, через бесконечный цикл:
    hello = str(input("Жмакай Y, если хочешь сыграть в угадайку, ну или N, чтобы пропустить блок "))
    number = 5
    while 1:
        if hello == "Y":
             guess = int(input('Введите целое число : '))
             if guess == number:
                 print('Поздравляю, вы угадали.')
                 break
             elif guess < number:
                 print('Нет, загаданное число немного больше этого')
             else:
                 print('Нет, загаданное число немного меньше этого.')
             print('Цикл while закончен.')
            # Здесь можете выполнить всё что вам ещё нужно
    
        elif hello == "N":
            break
    
        else:
            print('Вы не указали свой выбор')
            hello = str(input("Жмакай Y, если хочешь сыграть в угадайку, ну или N, чтобы пропустить блок "))
    
    print('Завершение.')
    Ответ написан
  • Как генерировать картинку для социальных сетей с помощью Python?

    TomasHuk
    @TomasHuk
    Pil или pillow (для python 3). И да, указывается левый верхний угол начала текста. Возможно, что бы его отцентрировать нужно будет хитро высчитывать начальные координаты в зависимости от длины текста.
    Ответ написан
    Комментировать
  • Библиотека на python или онлайн сервис для сравнения изображений?

    TomasHuk
    @TomasHuk
    Посмотрите еще здесь и здесь. В свое время мне эти статьи очень помогли. Алгоритм простой. Можно достаточно быстро написать свою программу. С помощью расстояния Хэмминга можно контролировать "похожесть" изображений.
    Ответ написан
    Комментировать
  • Как подобрать точный цветовой оттенок, который напечатает принтер?

    TomasHuk
    @TomasHuk
    Когда-то мне очень помогли эти статьи: 1 и 2. Тогда я впервые узнал о pil (pillow), и что на python можно делать с графикой разные удивительные вещи. Думаю, это то, что вам нужно. Остальное есть в документации. Вам понадобится модуль ImageDraw , а в нем PIL.ImageDraw.Draw.rectangle для рисования прямоугольников.
    P.S. Есть отличия между pil(python 2.7) и pillow (python 3.x). Нюансы я не помню, но там все просто.
    Ответ написан
    1 комментарий
  • Как отследить нажатия клавиш в Python с помощью pyHook, если окно программы не в фокусе?

    TomasHuk
    @TomasHuk
    К сожалению есть такая проблема. Как я понял если в имени окна есть символы кириллицы, то выдает эту ошибку. Нашел форк pyHook pyhook_py3k, где написано следующее:

    Fixed unicode decoding bug of window title. This bug may cause crashing on exit randomly. Usually with console output:

    TypeError: MouseSwitch() takes exactly 9 arguments (1 given)
    or

    TypeError: KeyboardSwitch() takes exactly 9 arguments (1 given)

    Не знаю как это исправлено в том форке, ведь в файле HookManager.py все еще осталась функция KeyboardSwitch(self, msg, vk_code, scan_code, asci..., которая и выдает эту ошибку.
    Пока у меня не получилось запустить без ошибки, но возможно нужно еще подумать.
    Ответ написан
    Комментировать
  • Как запустить файл excel из python?

    TomasHuk
    @TomasHuk Автор вопроса
    В итоге нашел четыре способа для запуска любых файлов (правда у всех общая проблема - не запускаются файлы, если есть пробелы в имени или пути):
    1. Самый простой и правильный, через subprocess:
    import subprocess
    subprocess.call("d:\\2014.xlsx", shell=True)

    или
    import subprocess
    subprocess.Popen("d:\\2014.xlsx", shell=True)

    Нашел в интернете:
    Для запуска команд системы используется две функции subprocess.call() и subprocess.Popen(). Основное отличие этих функций между собой: функция subprocess.call() блокирует выполнение сценария до получения ответа, в то время как функция subprocess.Popen() - нет.
    subprocess.call() - используется, если нужно просто запустить команду, а вывод от нее сохранять не требуется.
    subprocess.Popen() - используется, если требуется захватить вывод команды

    Все ОК, просто и четко.
    2. Другой отличный вариант:
    os.startfile('recomendations.log')
    Эта функция открывает файл с помощью программы, указанной в реестре Windows для файлов этого типа.
    3. Через win32com.client и WScript.Shell:
    import win32com.client
    shell = win32com.client.Dispatch("WScript.Shell")
    shell.Run('d:\meridian.jpg')

    4. Метод, который не советую, через os:
    import os
    os.system(r'd:\2014.xlsx')

    Выскакивает окно cmd.exe что плохо.
    Ответ написан
    Комментировать
  • Python: как отловить сочетания клавиш?

    TomasHuk
    @TomasHuk
    Тоже очень интересует этот вопрос. Если есть решение, сбросьте сюда в комментарии код на питоне.
    P.S.(через два дня) Решил вопрос.
    import win32api
    import pythoncom
    import pyHook
    
    def OnKeyboardEvent(event):
        # проверяем статусы клавиш-модификаторов
        # возвращаемые значения:
        # 0 или 1 - клавиша отжата
        # (-127) или (-128) - клавиша нажата
        ALT     = win32api.GetKeyState(0x12)    #
        CTRL    = win32api.GetKeyState(0x11)
        SHIFT   = win32api.GetKeyState(0x10)
        LWIN    = win32api.GetKeyState(0x5B)
        HOME    = win32api.GetKeyState(0x24)
        if event.Key=='Home' and event.MessageName == 'key down':
            if CTRL<0 and SHIFT<0 and ALT<0:
                print('Нажата комбинация клавиш CTRL+SHIFT+ALT+HOME')
            elif CTRL<0 and SHIFT<0:
                print('Нажата комбинация клавиш CTRL+SHIFT+HOME')
            elif ALT<0 and SHIFT<0:
                print('Нажата комбинация клавиш SHIFT+ALT+HOME')
            elif CTRL<0 and ALT<0:
                print('Нажата комбинация клавиш CTRL+ALT+HOME')
            elif CTRL<0:
                print('Нажата комбинация клавиш CTRL+HOME')
            elif SHIFT<0:
                print('Нажата комбинация клавиш SHIFT+HOME')
            else:
                print('Нажата клавиша HOME')
        return True
    
    hm = pyHook.HookManager()       # создание экземпляра класса HookManager
    hm.KeyAll = OnKeyboardEvent     # отслеживаем нажатия клавиш
    hm.HookKeyboard()               # вешаем хук
    pythoncom.PumpMessages()        # ловим сообщения

    Проверял на Win7, python 3.3.
    Помог этот пост, таблица виртуальных кодов клавиш и документация по win32api и pyHook.
    Ответ написан
    2 комментария
  • Разработка приложений под Андроид на Python

    TomasHuk
    @TomasHuk
    Вот кстати здесь смотрите первое видео. Как раз по теме. Может пригодится.
    Ответ написан
    Комментировать
  • Как сделать скриншот с заданием координат мышью с помощью python?

    TomasHuk
    @TomasHuk Автор вопроса
    Сделал плохо (я только учусь), но работает. Определяю координаты без клика, простым наведением курсора с задержкой по времени в 3 с, чтобы успеть переместить мышь.
    from PIL import Image, ImageGrab
    import win32api, time
    
    #задаем координаты прямоугольника скриншота
    def get_coordinates():
        #задаем верхний левый угол
        time.sleep(3)
        x0, y0=win32api.GetCursorPos()
        #задаем правый нижний угол
        time.sleep(3)
        x_max, y_max=win32api.GetCursorPos()
        return(x0,y0,x_max,y_max)
    
    def main():
        x0,y0,x_max,y_max=get_coordinates()
        img = ImageGrab.grab((x0, y0, x_max, y_max))
        img.save(("01.png"), "PNG")
    
    if __name__=='__main__':
        main()
    Ответ написан
    Комментировать
  • Python + PyQt + Qt Designer. Что дальше?

    TomasHuk
    @TomasHuk
    Есть же куча книг, все просто гуглится. Например книга "Прохоренок Н.А. - Python 3 и PyQt. Разработка приложений", 2012 год.
    Из сайтов - Введение в среду PyQt4, например.
    Ответ написан
    Комментировать