Portál AbcLinuxu, 6. května 2025 07:28

Dotaz: tkMessageBox v Pythonu

14.8.2011 17:35 Raada | skóre: 4
tkMessageBox v Pythonu
Přečteno: 212×
Odpovědět | Admin
Ahoj, Zajimalo by me, jesli oknu se zpravou vytvorenemu pomoci tkMessageBox lze nejak sebrat focus, aby toto okno bylo videt, ale dalo se klikat do jineho okna. Napr rekneme, ze mam platno a chci si klikanim na nej vypsat souradnice kliku. V mem prikladu to je mozne pouze az po uzavreni messageboxu. Ja bych potreboval, aby mohl klikat i kdyz je messagebox zobrazeny a v idealnim pripade navazat konec bindingu na zmizeni toho messageboxu (nejlip tak, ze na tlacitko navazu jinou funkci, nez jen zavreni toho okna se zpravou). Jde to? Nebo si musim napsat vlastni msgbox?

Priklad:
import Tkinter, tkMessageBox

class Platno():

    def __init__(self,master):
        p=Tkinter.Canvas(width=100, height=100)
        p.grid(column=0, row=0)
        p.bind("Button-1",self.funkce)

        self.souradnice=[]
       
    def funkce(self,event):
        self.souradnice.append([event.x,event.y])
        print self.souradnice[-1][0],self.souradnice[-1][1]

top=Tkinter.Tk()
platno=Platno(top)
tkMessageBox.showinfo("Info","Klikej a pak zmackni OK")
top.mainloop()
Dik za info:-)

ps.: misto "Button-1" ma byt samozrejme <"Button-1">, ale editor to nejak nechce vzit:-(

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (Raada (tazatel))
15.8.2011 09:04 martin
Rozbalit Rozbalit vše Re: tkMessageBox v Pythonu
Odpovědět | | Sbalit | Link | Blokovat | Admin
A proč místo tkMessageboxu kterej bude mít asi focus pořád dokud ho neukončíš
nepoužiješ klasický Toplevel.

hodně zjednodušeně:

import Tkinter

class InfoW(Tkinter.Toplevel):
    def __init__(self):
        Tkinter.Toplevel.__init__(self)
        self.title('Info Window')
        self.geometry('100x30+0+0')
        self.lab = Tkinter.Label(self, text='')
        self.lab.pack()
        
class Platno():

    def __init__(self,master):
        p=Tkinter.Canvas(width=100, height=100)
        p.grid(column=0, row=0)
        p.bind("Button-1",self.funkce)
        self.info = InfoW()
       
    def funkce(self,event=None):
        self.info.lab['text'] = 'X:{}, Y:{}'.format(event.x, event.y)

top=Tkinter.Tk()
platno=Platno(top)
top.title('Sem Klikej')
top.mainloop()
16.8.2011 10:16 Raada | skóre: 4
Rozbalit Rozbalit vše Re: tkMessageBox v Pythonu
To me samozrejme napadlo, ale nechtelo se mi kvuli jedne hlasce delat novou tridu:-( No, ale jestli to jinak nejde, tak to teda udelam tak.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.