Modularyzacja komponentów

0

Witam, mam pytanie odnośnie klas. Ma w module zrobią klasę w TKi, w drugim mam kolejną. Każda z klas oddzielnie otwiera się w swoim oknie. Potrzebuję zrobić aby jedną klasę zaimportować do drugiej tak aby oba okna otwierały się w jednym ( w jednym oknie mam przyciski wyboru a w drugim jakiś wynik który się wyświetla po kliknięciu przycisku i cały mechanizm chciałbym mieć w jednym oknie). Z góry dziękuję za wszelkie wskazówki. Pozdrawiam :D

46

Kompozycja?

0

@progcet98:

Na przyszłość odróżnij sobie analizę statyczną (gdzie są klasy i w jakich pakietach / źródłach sie zawierają), a dynamiczną (które okno jakie wywołuje) itd ...
Nie dajesz kodu, ale jak rozumiem o co pytasz - to są niezależne sprawy.

Biorąc na klatę 2w1 jest trudniej, a nie łatwiej.

0
ZrobieDobrze napisał(a):

@progcet98:

Na przyszłość odróżnij sobie analizę statyczną (gdzie są klasy i w jakich pakietach / źródłach sie zawierają), a dynamiczną (które okno jakie wywołuje) itd ...
Nie dajesz kodu, ale jak rozumiem o co pytasz - to są niezależne sprawy.

Biorąc na klatę 2w1 jest trudniej, a nie łatwiej.

Wiem, masz rację. Nie daję kodu bo nie mogę - pracodawcy. Muszę jakoś to rozwiązać. Z narzędziem TKinter pracuję od wczoraj więc się muszę szybko nauczyć.

0
progcet98 napisał(a):
  • pracodawcy.

imieniny obchodzi 21 listopada ?

2

Jak klasa dziedziczy po tkinter.Frame to można jej instancje traktować jak widget i dodawać do okna tak jak inne buttony, etc., takie proste demo:

import tkinter as tk
import random


class MyFrame(tk.Frame):
    def __init__(self, parent, color) -> None:
        #tk.Frame.__init__(self, master=parent, bg=color)
        super().__init__(master=parent, bg=color)

        self.strvar = tk.StringVar()

        self.entry = tk.Entry(self, textvariable=self.strvar)
        self.entry.pack(expand=True)

        self.button = tk.Button(self, text="apply", padx=5)
        self.button["command"] = self.click
        self.button.pack(expand=True, pady=10)

        self.label = tk.Label(self, textvariable=self.strvar, bg=color)
        self.label.pack(expand=True)

        self.label_from_button = tk.Label(self, text="hello", bg=color)
        self.label_from_button.pack(expand=True)

    def click(self) -> None:
        self.label_from_button["text"] = self.entry.get()


def main() -> None:
    root = tk.Tk()

    ROWS = 2
    COLUMNS = 3
    font = ("Arial", 15)

    bt = tk.Button(root, text="Quit", command=root.destroy, font=font)
    bt.grid(row=0, column=0, columnspan=COLUMNS, pady=10)

    cfg = {"padx": 10, "pady": 10}

    for row in range(1, ROWS + 1):
        for col in range(COLUMNS):
            frame = MyFrame(root, f"#{random.randint(0, 0xFFFFFF):06x}")
            frame.configure(**cfg)
            frame.grid(row=row, column=col, sticky="nswe")


    root.mainloop()


if __name__ == "__main__":
    main()
0
jvoytech napisał(a):

Jak klasa dziedziczy po tkinter.Frame to można jej instancje traktować jak widget i dodawać do okna tak jak inne buttony, etc., takie proste demo:

import tkinter as tk
import random


class MyFrame(tk.Frame):
    def __init__(self, parent, color) -> None:
        #tk.Frame.__init__(self, master=parent, bg=color)
        super().__init__(master=parent, bg=color)

        self.strvar = tk.StringVar()

        self.entry = tk.Entry(self, textvariable=self.strvar)
        self.entry.pack(expand=True)

        self.button = tk.Button(self, text="apply", padx=5)
        self.button["command"] = self.click
        self.button.pack(expand=True, pady=10)

        self.label = tk.Label(self, textvariable=self.strvar, bg=color)
        self.label.pack(expand=True)

        self.label_from_button = tk.Label(self, text="hello", bg=color)
        self.label_from_button.pack(expand=True)

    def click(self) -> None:
        self.label_from_button["text"] = self.entry.get()


def main() -> None:
    root = tk.Tk()

    ROWS = 2
    COLUMNS = 3
    font = ("Arial", 15)

    bt = tk.Button(root, text="Quit", command=root.destroy, font=font)
    bt.grid(row=0, column=0, columnspan=COLUMNS, pady=10)

    cfg = {"padx": 10, "pady": 10}

    for row in range(1, ROWS + 1):
        for col in range(COLUMNS):
            frame = MyFrame(root, f"#{random.randint(0, 0xFFFFFF):06x}")
            frame.configure(**cfg)
            frame.grid(row=row, column=col, sticky="nswe")


    root.mainloop()


if __name__ == "__main__":
    main()

Dziękuję :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1