Задать вопрос
Ответы пользователя по тегу Tkinter
  • Как сделать 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 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 комментарий