Ответы пользователя по тегу Python
  • Как сделать Blink эффект python Tkinter?

    mysticmirage
    @mysticmirage
    import tkinter
    from itertools import cycle
    
    
    class BlinkMessage(tkinter.Message):
        def __init__(self, *args, **kwargs):
            self._ms = kwargs.pop('ms', 500)
            super().__init__(*args, **kwargs)
            self._blink_color = cycle([self['fg'], self['bg']])
            self._blink()
    
        def _blink(self):
            self['fg'] = next(self._blink_color)
            self.after(self._ms, self._blink)


    А потом уже у себя вместо tkinter.Message использовать этот BlinkMessage:
    cont_text = BlinkMessage(root, text=mesaja, justify=CENTER, width=root.winfo_screenwidth(), bg="#e6e7e8",
                             font=("Arial Narrow", 80, "bold"), fg="#231f20")


    Плюс теперь есть опциональный параметр ms, который задаёт интервал смены цвета в миллисекундах:
    cont_text = BlinkMessage(root, text=mesaja, justify=CENTER, width=root.winfo_screenwidth(), bg="#e6e7e8",
                             font=("Arial Narrow", 80, "bold"), fg="#231f20", ms=350)
    Ответ написан
    Комментировать
  • Какие существуют способы взаимодействия скриптов python?

    mysticmirage
    @mysticmirage
    Я в своё время брал за основу протокол HDL. Там используются широковещательные UDP-пакеты на порт 6000.

    Применительно к данному случаю, можно сделать так. При наступлении события (изменение освещённости до определённого уровня), датчик отправляет команду лампе включиться/выключится. Приёмник (лампа) настроен слушать такую команду и реагировать на неё.

    Таким образом не нужно постоянно опрашивать датчик -- датчик сам включает лапму командой.

    Там в протоколе предусмотрена обратная связь -- при переключении лампы она таким же широковещательным пакетом сообщает о своём состоянии. Либо же можно принудительно послать команду отдать своё состояние (без переключения).
    Ответ написан
    Комментировать
  • Для чего нужные побитовые операции в Python?

    mysticmirage
    @mysticmirage
    Для подсчёта контрольной суммы, например:
    def _crc(packet_array):
        checksum = 0
        for i in packet_array:
            checksum = checksum ^ (i << 8)
            for _ in range(8):
                if (checksum & 0x8000) > 0:
                    checksum = (checksum << 1) ^ 0x1021
                else:
                    checksum = checksum << 1
            checksum = checksum & 0xffff
        return checksum
    Ответ написан
  • Чем заменить Tkinter ?

    mysticmirage
    @mysticmirage
    К преимуществам Tkinter можно отнести то, что он есть из коробки в виндовых сборках питона, а так же он достаточно прост в освоении. Существенный недостаток один - на нём трудно построить более-менее сложные интерфейсы. К примеру, в стандартной поставке нет виджета таблицы.
    Возможности PyQt (PySide) удовлетворят требованиям к построению интерфейса любой сложности. Но иногда, для совсем простых интерфейсов, тянуть за собой кучу Qt-шных библиотек, не совсем целесообразно.
    Ответ написан
    3 комментария
  • Python Tkinter. Почему зависает графический интерфейс?

    mysticmirage
    @mysticmirage
    # -*- coding: utf-8 -*-
    
    from Tkinter import *
    import urllib, ttk, tkMessageBox
    from threading import Thread
    from Queue import Queue
    
    queue = Queue()  # создаём очередь
    
    def downloader():
        urllib.urlretrieve('http://cs521111v4.vk.me/u176613573/audios/d622212d34bf.mp3', 'Big K.R.I.T. – Bigger Picture.mp3')
        queue.put(True)  # помещаем в очередь True, после завершения загрузки. В очередь можно помещать любой объект.
    
    th = Thread(target=downloader, args=())
    
    def starter(event):
        th.start()
        pb.pack()
        pb.start()
    
    root = Tk()
    
    # создаём задачу, которая раз в секунду будет проверять очередь
    def task():
        try:
            q = queue.get_nowait()  # получить значение из очереди
        except:  # если в очереди ничего нет, то возвращаем False
            q = False
        if q:  # если вернулось True, то сообщаем об окончании
            tkMessageBox.showinfo('Done')
        root.after(1000, task)  # снова перезапускаем задачу после выполнения
    
    root.after(1000, task)  # инициализация задачи
    
    pb = ttk.Progressbar(length=200, orient='horizontal', mode='indeterminate')
    but = Button(root, text = 'Go!')
    root.minsize(width=400, height=350)
    but.bind('<Button-1>', starter)
    but.pack()
    root.mainloop()
    Ответ написан
    1 комментарий
  • Python Tkinter. Почему зависает графический интерфейс?

    mysticmirage
    @mysticmirage
    Нельзя вызывать методы Tkinter из других потоков, кроме как из главного (там где root = Tk()).
    Тут два варианта:
    1. Попробовать использовать mtTkinter.
    2. Передавать информацию о завершении загрузки из дочернего потока в главный при помощи Queue.
    Ответ написан
    1 комментарий
  • Как побороть The server name sent was not recognized (pycurl)?

    mysticmirage
    @mysticmirage
    Добавьте перед c.perform():
    c.setopt(pycurl.SSLVERSION, pycurl.SSLVERSION_SSLv3)

    P.S.
    Правильнее:
    c.setopt(pycurl.URL, 'http://bulllat.ru/')
    вместо:
    c.setopt(c.URL, 'http://bulllat.ru/')
    Ответ написан
    1 комментарий
  • Как найти ошибку в моем скрипте (python)?

    mysticmirage
    @mysticmirage
    У вас в процедуре Simple при n <= h цикл while не выполняется. Следовательно, переменная itog не определяется. Не буду обсуждать ваш алгоритм нахождения простых чисел, но попробуйте установить itog в False перед циклом. Как-то так:

    def Simple(n):
        h=2
        itog = False
        while n > h:   
            if n%h != 0:
                itog = True
            else:
                break
            h = h+1
        if itog == "True":
            print ("{0} - Простое число".format(n))
        else:
            print("{0} - Сложное число".format(n))
    n = int(input("Введите число:\n"))
    while n > 1:
        Simple(n)
        n = n - 1

    P.S. Как уже написали выше, вместо строк нужно использовать True/False без кавычек.

    P.P.S. Ещё пара замечаний:

    1. Если тип переменной - логический (boolean), то можно вместо
    if itog == True
    использовать просто
    if itog

    2. Обычно функции (процедуры) в Питоне пишутся со строчной буквы (under_score-нотация). С заглавной (CamelCase) принято именовать классы.
    Ответ написан
    1 комментарий
  • Python for Android. Как начать?

    mysticmirage
    @mysticmirage
    Питон для Андроида — достаточно мозгозатратное занятие.
    Я бросил эту затею, хотя иногда слежу за проектами, подающими надежду в этом направлении.

    Если нужно создавать игры, то это PyGame for Android — pygame.renpy.org
    Если нужно бизнес-приложения, то это Kivy — kivy.org (их гитхаб — github.com/kivy/python-for-android)

    Недостатки первого:
    1. проект не развивается
    2. ориентирован на создание игр
    3. только arm-архитектура
    4. поддерживается только одно касание

    Достоинства первого:
    1. ниже порог вхождения — достаточно легко устанавливается (не без бубна, но легче, чем kivy)
    2. куча документации по самой PyGame, которую можно использовать при разработке

    Недостатки второго:
    1. требует от устройства поддержку gles 2.0 (даже для простенького интерфейса)
    2. везде с собой тянет библиотеку для построения интерфейсов
    3. нужно постараться, чтобы установить всё это добро (кросс-компиляция и всё такое)

    Достоинства второго:
    1. любая поддерживаемая Андроидом архитектура
    2. проект развивается
    3. поддержка мультитач
    4. использует наработки PyGame for Android

    По поводу sl4a — он не позволяет создавать обособленные пакеты — требуется отдельно установленный интерпретатор Питона. По этой причине я его не рассматриваю.

    В любом случае, стоит быть готовым к тому, что размер пакета будет минимум 3 МБ даже в случае HelloWorld — каждое приложение будет тянуть с собой интерпретатор и стандартную библиотеку.

    Следует отметить, что это не аналитическое сравнение — я отметил те пункты на которые обращал внимание. Возможно дела обстоят по-другому и я заблуждаюсь — я не использую Питон для Андроида ни в одном из своих проектов, хотя хотел бы.
    Ответ написан
    Комментировать
  • Какой IDE редактор выбрать для Python/Django?

    mysticmirage
    @mysticmirage
    Раньше пользовался Geany, но потом открыл для себя Komodo Edit. Не такой легковесный, но зато в нём есть подсветка синтаксиса шаблонов Django.
    Ответ написан
    Комментировать