О приложении

Аватар пользователя ZIL.ok.130

При разработке интерфейсов на Tkinter обнаружил что в нём нет стандартного AboutBox.

После недолгих мучений получилось то что вы видите на заглавной картинке.

Работает вот  так: 

Код class About:

from tkinter import*
from PIL import Image, ImageTk
import itertools
import webbrowser
#__author__ = Z.I.L.(З.И.Л.)
class AboutBox(Toplevel):
    def __init__(self, parent, data_about):
        super().__init__(parent)
       
        self.title('About') # название окна напишите своё
        self.geometry('350x250')
        self.resizable(False, False)
       
        adress = data_about[0]        # распаковываем данные
        file_path = data_about[1]
        link = data_about[2]
        author_text = data_about[3]
        license_text = data_about[4]
       
        def toggle1():
            func = next(toggle_funcs1)   # переключатель для кнопки Авторы
            func(label_author)
           
        def toggle2():
            func = next(toggle_funcs2)   # переключатель для кнопки Лицензии
            func(label_license)
       
        def animate_forward(label_author):  # анимация подъёма
            counter=250
            def count():
                nonlocal counter
                counter -= 1
                if counter ==121:
                    return
                else:
                    label_author.config(label_author.place(x=0, y=counter))
                    label_author.after(25, count)
            count()
           
        def animate_back(label_author):  # анимация сворачивания
            counter=121
            def count():
                nonlocal counter
                counter += 1
                if counter ==250:
                    return
                else:
                    label_author.config(label_author.place(x=0, y=counter))
                    label_author.after(25, count)
            count()
       
        def callback(event):
            if adress == "" or None:
                return
            else:
                webbrowser.open_new(adress) # адрес сайта приложения: adress="http(s)://www.%S.%S"
       
        picture = Image.open(file_path) # путь к файлу изображения: file_path="/path/to/filename"
        pict = picture.resize((52,52), Image.ANTIALIAS)
        img = ImageTk.PhotoImage(pict)
        label_img = Label(self, fg = '#FFDEAD', image = img)
        label_img.image = img
        label_img.place(x=149, y=10, width=52, height=52)
       
        label_link = Label(self, text=link, anchor=CENTER, font="Verdana 10 underline", fg="#87CEEB", cursor="hand2")
        label_link.configure(underline = 1)              # имя сайта приложения/ссылка: link="%S.%S"
        label_link.bind("<Button-1>", callback)
        label_link.place(x=75, y=75, width=200, height=30)
       
        label_author = Label(self, text = author_text, # author_text="%S"
        anchor = N)
        label_author.place(x=0, y=250, width=350, height=100)
        toggle_funcs1 = itertools.cycle((animate_forward, animate_back))
       
        label_license = Label(self, text = license_text, #license_text="%S"
        anchor = N)
        label_license.place(x=0, y=250, width=350, height=100)
        toggle_funcs2 = itertools.cycle((animate_forward, animate_back))
       
        btn_author = Button(self, text = 'Авторы', command = toggle1)
        btn_author.place(x=15, y=220)
       
        btn_license = Button(self, text = 'Лицензии', command = toggle2)
        btn_license.place(x=123, y=220)
       
        btn_close = Button(self, text = 'Закрыть')
        btn_close.place(x=247, y=220)
        btn_close.bind('<Button-1>', lambda event: self.destroy())

В основном файле пропишите:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
from tkinter import*
from classAbout import AboutBox
class App(Tk):
    def __init__(self):
        super().__init__()
       
        main_menu = Menu(self)
        self.config(menu=main_menu)
        info_menu = Menu(main_menu, tearoff=0)
        main_menu.add_cascade(label = 'Инфо', menu=info_menu)
        info_menu.add_command(label = 'О программе', command = self.open_aboutbox)
   
    def open_aboutbox(self):
       
        adress = r"" # или адрес или "", перед кавычками поставьте r
        file_path = "python.png" # замените на путь к своему файлу изображения, если нет файла -""
        link = "google.com" # ссылка на сайт приложения, если сайта нет оставьте пустые кавычки
        author_text = "Авторы: Уася Пупкен, Куся Мусин, Муся Кусин." # сюда вписывайте авторов приложения
        license_text = "Свободное распространение"       # а сюда лицензию под которой выходит приложение
        self.data_about =(adress,file_path,link,author_text,license_text)
        about = AboutBox(self, self.data_about)
        about.grab_set()
if __name__ == "__main__": # проверка импортируемый файл или нет
    app = App()
    app.mainloop()

Кому нужно -- пользуйтесь на здоровье. 

Авторство: 
Авторская работа / переводика

Комментарии

Аватар пользователя ZIL.ok.130
ZIL.ok.130(6 лет 10 месяцев)

Чёта спойлеры не сворачиваются.

Если админы решат что не по теме ресурса -- сносите нахрен без сожаления.

smile1.gif

Аватар пользователя bigmal
bigmal(8 лет 8 месяцев)

Ох ты ж...!!! Кто бы подумал, что такие люди таким занимаются! Респект!!! 

Аватар пользователя ps ps
ps ps(3 года 5 месяцев)

ну ок, но без милтopга и класса биохолодильник (полиморфирующего) - нищетоба )))

Аватар пользователя Событие
Событие(10 месяцев 4 недели)

Осталось сайт на питончике выложить.

Аватар пользователя ZIL.ok.130
ZIL.ok.130(6 лет 10 месяцев)

Почему на питончике?

Можно и на PHP. Оно и проще так.

smile19.gif

Аватар пользователя filidor
filidor(5 лет 1 день)

Tk сильно постарше, чем "стандартность" AboutBox.

Ну и фиксированное положение виджетов - не то, к чему надо стремиться.

Аватар пользователя ZIL.ok.130
ZIL.ok.130(6 лет 10 месяцев)

А где ты увидел фиксированность?

Это у тебя глюки.

Пользуйся pack() и будет тебе "резиновость" в полный рост.

Ну и насчёт постарше -- эт тебя мотануло куда то не туда.

Ты всерьёз думаешь что WX и GTK -- моложе?

smile1.gif

Аватар пользователя filidor
filidor(5 лет 1 день)
label_img.place(x=149, y=10, width=52, height=52)

Типа это мне почудилось? :)

И да, wx и gtk моложе. Tk нынче практически не развивается. Последнему стабильному мажорному релизу больше 10 лет.

Аватар пользователя ZIL.ok.130
ZIL.ok.130(6 лет 10 месяцев)

Ыыыы -- ты не отдупляешь зачем это было сделано?

Ну тогда кто дебе дохтур?

smile1.gif

Аватар пользователя ZIL.ok.130
ZIL.ok.130(6 лет 10 месяцев)

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

smile1.gif

Аватар пользователя Гнодви Меранов

Почему нет стандартного?

А вот это: https://docs.python.org/3/library/tkinter.messagebox.html

А, понял, это про MessageBox. Пишите лучше сразу на Tcl/Tk ) Очень уважаю этот язык.