Ответы пользователя по тегу Tkinter
  • Как сделать обновление кода времени на пайтоне?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    from tkinter import *
    import calendar
    import datetime
    
    now = datetime.datetime.now()
    
    root = Tk()
    root.title("time")
    root.geometry("400x250")
    root.resizable(width=False, height=False)
    
    delay = 1000
    
    def lbl_func():
        now = datetime.datetime.now()
        label.config(text=now)
        label.after(delay, lbl_func)
    
    label = Label(text=now, font="12", pady="10")
    label.pack()
    
    lbl_func()
    
    root.mainloop()
    Ответ написан
    Комментировать
  • Как сделать функцию нажатия ентера в entry tkinter?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    def funcc(event):
        pass    #Something Do!
    
    root.bind('<Return>', funcc)
    Ответ написан
    Комментировать
  • Как обозначить событие нажатия на Esc в canvas tkinter?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    def esc_pressed(event):
        print('esc_pressed')
    
    canvas.bind_all('<Escape>',esc_pressed)   #_all !     or <KeyPress-Escape>
    Ответ написан
    Комментировать
  • [Tkinter/Python] Как увеличить круг в Tkinter?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    В данном примере задержка 100ms
    import tkinter as tk
    
    root = tk.Tk()
    root.wm_title("Circles and Arcs")
    
    ww = 1000
    wh = 1000
    sw = root.winfo_screenwidth()                   #Расположение окна по центру экрана
    sh = root.winfo_screenheight()                  #
    wx = (sw - ww)/2                                #
    wy = (sh - wh)/2                                #
    root.geometry('%dx%d+%d+%d' % (ww, wh, wx, wy)) #
    
    canvas = tk.Canvas(root, width=ww, height=wh, borderwidth=0, highlightthickness=0, bg="black")      #Канвас
    canvas.grid()
    
    size_kef = 10       #Кэф изначального размера шарика
    grow_kef = 5        #Кэф скорости роста
    grow_delay = 100    #Задержка в милисекундах
    
    x0 = ww/2-size_kef          #Установка изначального размера шарика
    y0 = wh/2-size_kef          #
    x1 = ww/2+size_kef          #
    y1 = wh/2+size_kef          #
    
    coordx = x0, y0, x1, y1     #
    
    orb = canvas.create_oval(coordx, fill="blue", outline="", width=4)     #Шарик
    
    def stop():                                     #Завершение роста по достижению границ окна
        print("stop")
        canvas.itemconfig(orb, fill="green")
    
    def grow():
        global x0, y0, x1, y1
        print((x1-x0))
        
        x0 -= grow_kef              #Изменение размера шарика
        y0 -= grow_kef              #
        x1 += grow_kef              #
        y1 += grow_kef              #
        coordx = x0, y0, x1, y1     #
        canvas.coords(orb, coordx)  #
    
        if (x1-x0)<=ww or (y1-y0)<=wh:
            canvas.after(grow_delay, grow)          #Обращение функции к самой себе через задержку (.after())
    
        if (x1-x0)>=ww or (y1-y0)>=wh:              #Здесь ограничение на рост (граница - размеры окна)
            stop()
    
    grow()      #Первичный вызов функции
    
    root.mainloop()
    Ответ написан
    Комментировать
  • Как сделать линию tkinter?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    Управление на колёсико [Окно и канвас создайте сами]
    #Импорты
    from tkinter.font import Font
    
    #<<<<<<<<<<<<<<<<<<<<<<<
    #Создание окна и канваса
    #>>>>>>>>>>>>>>>>>>>>>>>
    
    kef1 = 1.13     #Кэф изменения длины линии (↑↑)
    kef2 = kef1*2   #Кэф изменения расстояния вниз от текста (↑↓)    "2" тоже норм
    kef3 = 5        #Шаг изменения величины шрифта (↑↑)
    kef4 = 1        #Кэф изменения толщины линии (↑↑)
    font_size = 10  #Размер шрифта
    font = Font(family="TkDefaultFont", size=font_size, weight="bold")  #Параметры шрифта
    line_metric = font.metrics("linespace")     #Получение размера шрифта
    clr_text = 'black'  #Цвет текста
    clr_line = 'red'    #Цвет линии
    line_w = 4          #Базовая толщина линии
    
    line_l = line_metric*kef1   #Первичная длина линии
    
    text = canvas.create_text(200,200, text='TEXT', font=font, fill=clr_text)                               #Создание текста на канвасе
    x, y = canvas.coords(text)                                                                              #Получение координат центра текста
    line = canvas.create_line(x-line_l,y+line_l/kef2,x+line_l,y+line_l/kef2, width=line_w, fill=clr_line)   #Создание линии на канвасе
    
    def Wh_rot(event):
        global font_size, line_w, kef3, kef4
        if event.num == 4 or event.delta == 120:    #Определение стороны вращения Mouse_Wheel
            font_size+=kef3     #Изменение значения размера шрифта (+)
            line_w+=kef4        #Изменение толщины линии (+)
            font = Font(family="TkDefaultFont", size=font_size, weight="bold")    #Параметры шрифта
            canvas.itemconfig(text, font=font)  #Изменение размера шрифта на канвасе (+)
            
            line_metric = font.metrics("linespace") #Получение размера шрифта
            line_l = line_metric*kef1               #Изменение значения длины линии (+)
            x, y = canvas.coords(text)              #Получение координат центра текста
            crd = x-line_l, y+line_l/kef2, x+line_l, y+line_l/kef2  #Присваивание значения длины координатам линии
            canvas.coords(line, crd)                #Изменение длины линии на канвасе (+)
            canvas.itemconfig(line, width=line_w)   #Изменение толщины линии на канвасе (+)
    
        else:   #(-)
            font_size-=kef3
            if font_size<5:     #Ограничение отрицательных величин
                font_size=5     #^
            line_w-=kef4
            if line_w<1:        #^
                line_w=1        #^
            font = Font(family="TkDefaultFont", size=font_size, weight="bold")
            canvas.itemconfig(text, font=font)
            
            line_metric = font.metrics("linespace")
            line_l = line_metric*kef1
            x, y = canvas.coords(text)
            crd = x+line_l, y+line_l/kef2, x-line_l, y+line_l/kef2
            canvas.coords(line, crd)
            canvas.itemconfig(line, width=line_w)
    
    root.bind('<MouseWheel>', Wh_rot)   #Крути колесо мыши
    
    root.mainloop()
    Ответ написан
    Комментировать
  • Как обработать событие Alt + Esc в tk python3?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    >pip install keyboard
    import keyboard
    
    def action():
        print("action")
    
    keyboard.add_hotkey("alt + escape", lambda: action(), suppress=True)   #suppress - on/off обработки системных комбинаций (True - off)
    Ответ написан
    Комментировать
  • Как в tkinter задать последовательность команд при нажатии на кнопку?

    SuckMyPython
    @SuckMyPython
    matrix.polling(none_stop=True)
    Don't use time.sleep()
    Use element.after(delay, do_smth)

    from tkinter import *
    from PIL import Image, ImageTk
    
    w = Tk()
    
    i=j=0
    
    img1 = Image.open("1.png")
    img2 = Image.open("2.png")
    img3 = Image.open("3.png")
    
    image1 = ImageTk.PhotoImage(img1)
    image2 = ImageTk.PhotoImage(img2)
    image3 = ImageTk.PhotoImage(img3)
    
    img_list = [image1, image2, image3]
    text_list = ['Ожидание','Ожидание.','Ожидание..','Ожидание...']
    
    text_delay = 500    #Настройка задержки изменения текста
    img_delay = 1000    #Настройка задержки изменения картинки
    
    text_cicle = 3      #Настройка количества циклов изменения текста
    img_cicle = 2       #Настройка количества циклов изменения картинок
    
    def imgTV_end():
        print("akbar")
        lbl.configure(text = 'Опа!', image='')
    
    def img_func():
        global i,j
        lbl.configure(image = img_list[i])
        print(i)
        print(j)
        i+=1
        if i>len(img_list)-1:
            i=0
    
        if j<len(img_list)*img_cicle:
            lbl.after(img_delay, img_func)
    
        j+=1
        if j>len(img_list)*img_cicle:
            j=0
            i=0
            imgTV_end()
    
    def click():
        global i,j
        lbl.configure(text = text_list[i])
    
        i+=1
        if i>len(text_list)-1:
            i=0
    
        if j<len(text_list)*text_cicle:
            lbl.after(text_delay, click)
    
        j+=1
        if j>len(text_list)*text_cicle:
            j=0
            i=0
            img_func()
    
    lbl = Label(text = '')
    lbl.pack()
    
    btn = Button(text='Жмяк', command=click)
    btn.pack()
    
    w.mainloop()
    Ответ написан
    Комментировать
  • Как сделать очищение после каждого нажатия кнопки?

    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 комментарий
  • Как отправить данные из дочернего окна в основное?

    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()
    Ответ написан
    Комментировать