blog.furas.pl
# prywatne notatki - Python, Linux, Machine Learning, etc.

Prosty przykład komunikacji między oknem rodzica i potomka w Tkinter

To jest "przedruk" mojej wypowiedzi na polskim forum Pythona http://pl.python.org/forum/index.php?topic=4366.msg18688#msg18688


Przeróbka poprzedniego przykładu - teraz przycisk w oknie Child zmienia napis na przycisku w oknie Main dzięki temu, że rodzic przekazuje self do dziecka. Dodatkowo dziecko wywołuje funkcje onButton() należącą do rodzica.

import Tkinter as tk

#----------------------------------------------------------------------

class Main(tk.Tk): # dziedziczenie po klasie tk.Tk

    def __init__(self):
        tk.Tk.__init__(self) # wywolanie konstruktora klasy tk.Tk
        self.title("Main") # wewnetrzny dostep do wlasnosci okna

        self.button = tk.Button(self, text="Otworz okno Child z okna Main", command=self.onButton)
        self.button.grid()

    def onButton(self):
        self.child = Child(self) # przekazanie okna jako rodzica

    def run(self):
        self.mainloop()

#----------------------------------------------------------------------

class Child(tk.Toplevel): # dziedziczenie po klasie tk.Toplevel

    def __init__(self, parent):
        self.parent = parent

        tk.Toplevel.__init__(self, parent) # wywolanie konstruktora klasy tk.Toplevel
        self.title("Child") # wewnetrzny dostep do wlasnosci okna

        tk.Button(self, text="Zamien tekst na przycisku w oknie Main", command=self.onButton).grid()

    def onButton(self):
        self.parent.button['text'] = 'Nowy tekst na przycisku rodzica'
        self.parent.onButton()

#----------------------------------------------------------------------

glowne = Main()
glowne.title("Glowne") # zewnetrzny dostep do wlasnosci okna
glowne.run()
Książki: python-dla-kazdego-podstawy-programowania python-wprowadzenie python-leksykon-kieszonkowy python-receptury python-programuj-szybko-i-wydajnie python-projekty-do-wykorzystania black-hat-python-jezyk-python-dla-hackerow-i-pentesterow efektywny-python-59-sposobow-na-lepszy-kod tdd-w-praktyce-niezawodny-kod-w-jezyku-python aplikacje-internetowe-z-django-najlepsze-receptury