Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 23, 2013 15:15:29

Ookami
От: Екатеринбург
Зарегистрирован: 2013-10-20
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

виджет tkinter.tix.Balloon

Как настроить данный виджет, интересуют такие параметры как background, font, позиция метки.

Офлайн

#2 Окт. 23, 2013 15:58:22

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

виджет tkinter.tix.Balloon

Я бы посоветовал напилить самому руками :)
Задача не сложная, на самом то деле…



Офлайн

#3 Окт. 24, 2013 07:02:29

Ookami
От: Екатеринбург
Зарегистрирован: 2013-10-20
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

виджет tkinter.tix.Balloon

Попробовал написать сам, получилось нечто вот-такое:

import tkinter as tk
class popup():
    def _build(self,event):
        self.pupwin=tk.Toplevel()
        self.pupwin.overrideredirect(1)
        self.label=tk.Label(self.pupwin,text="test ok")
        self.label.pack(side = tk.BOTTOM)
    def _destroy(self,event):
        self.pupwin.destroy()
root=tk.Tk()
lab=tk.Label(text="test")
but=tk.Button(text="ok")
msg=popup()
but.bind('<Enter>',msg._build)
but.bind('<Leave>',msg._destroy)
lab.pack()
but.pack()
root.tk.mainloop()

Сначала хотел скрывать/показывать окно через withdraw/deiconify, но почему-то после запуска программы, после первого покидания курсором виджета, всю программу сворачивает.

Офлайн

#4 Окт. 24, 2013 12:48:01

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

виджет tkinter.tix.Balloon

1. Раз Вам так нравяться классы, то напилите это все в виде класса. Так будет правильнее :)
2. Я хочу предожить немножко другое решение (это решение более адаптивное):

import tkinter
#
#
def Enter_(event):
    if event.type == "7":
        wdg = event.widget
        px = wdg.winfo_x() / float(root.winfo_width())
        py = (wdg.winfo_y() + wdg.winfo_height()) / float(root.winfo_height())
        ballon.place(relx=px, rely=py, anchor="nw")
    else:
        ballon.place_forget()
#
root = tkinter.Tk()
root.geometry("400x400+100+100")
#
frame = tkinter.Frame(root, width=400, height=400)
frame.place(relx=0.5, rely=0.5, anchor="center")
button = tkinter.Button(root, text="focus_me")
button.pack()
button.bind("<Enter>", Enter_)
button.bind("<Leave>", Enter_)
#
ballon = tkinter.Label(root, padx=5, pady=5, bg="yellow")
ballon["text"] ="Help to button..."
#
root.mainloop()

3. Это лучше не делать без причины:

self.pupwin.overrideredirect(1)

Так как в этом случае оконный менеджер будет его игнорировать. Кроме того, это решение будет рабоать не на всех операционных системах. В основном такой подход применяется для отображения стартового окна программы с красивым (и не всегда красивым) рисунком :)

Будут вопросы - пишите.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version