Python Gui tk

0

Witam , napisałem prostą pętle , którą chciałbym podpiąć pod GUI w tkinter.
Chcę aby to wyglądało w ten sposób ( jeśli to możliwe) :
Bonus - (wpisujemy element podany w słowniku) - wyskakuje okienko z (showinfo) odp.

Jeśli jestem w totalnym błędzie proszę o wskazówkę co zmienić lub jak się za to poprawnie zabrać.


```import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showinfo

slowa=["lisek","idk"]
odp = ["rudy","meh"]


def lookf():
    while True:
        x  = input("Hi: ")
        x  = x.lower()
        
        try:
            sindex = slowa.index(x)
        except:
            if x.isdigit():
                print("Cyfry mi się nie podobają!")
            else:
                print("Znajdz inne slowo")
                continue
        print(odp[sindex])

def popup_bonus():
    win = tk.Toplevel()
    win.wm_title("Window")
    s = tk.Entry(win, text= lookf).grid(column = 1, row = 1) # jeśli znajdzie slowo w lookf  to wyskakuje okienko z odp[sindex]
    l = tk.Label(win)
    l.grid(row=0, column=0)
    
    b = ttk.Button(win, text="Okay", command=lookf)
    b.grid(row=1, column=0)

def popup_showinfo():
    showinfo("Window", "Hello World!")

class Application(ttk.Frame):

    def __init__(self, master):
        ttk.Frame.__init__(self, master)
        self.pack()

        self.button_bonus = ttk.Button(self, text="Bonus", command=popup_bonus)
        self.button_bonus.pack()

        self.button_showinfo = ttk.Button(self, text="Show Info", command=popup_showinfo)
        self.button_showinfo.pack()

root = tk.Tk()

app = Application(root)

root.mainloop()```
0

Pytanie, czy to okienko ma wyskakiwać od razu jak ktoś wpisze dane słowo?
Czy musi sprawdzić przyciskiem, czy co?
Opisz troszkę dokładniej co chcesz uzyskać, z kodu to jednoznacznie nie wynika.
Zwłaszcza że nie przechowujesz nigdzie zmiennej z entry.
Co więcej, input() działa to konsoli, po co robić okienko gdy masz wpisywać w konsoli?
Z powyższych powodów, wywodzi się prośba o dokładne wyjaśnienie co chcesz uzyskać :).

PS: Unikaj pętli while True z tkinter'em, bo może się okazać że nigdy nie zajdzie twój root.mainloop().
Co objawi się zawiasem programu na wieki wieków - Pętlą naturalnego zgonu oprogramowania :D

0

Pierwszy raz bawię się tkinterem i tematyka gui. Pokazana pętla jest ubogim przykładem w warunki.
Użytkownik zna baze elementów które będzie wpisywać.Mój bład bo najpierw napisałem skrypt a potem zabrałem się za Gui

Chcę żeby po wpisaniu wyrazu do entry i zatwierdzeniu przyciskiem ( myślę , że dodatkowy przycisk byłby dla mnie bardziej jaśniejszy do zrozumienia).
Dla wpisanego słowa ma znaleźć swojego odpowiednika po indexie przy użyciu pętli.
Następnie wyświetlić tego odpowiednika w okienku.

Głównym problemem jest moment przejścia od wpisania słowa przez znalezienie odpowiednika i wyświetlenie odpowiednika.

Ps: Znalazłem funkcje after() i bind() ale nie wiem czy to mi coś pomoże w tym problemie.

0

after() - jest dobre gdy prowadzisz "nasłuch" w programie na jakieś zmienne które się modyfikują.
bind() - przydaje się gdy chcesz coś robić określonymi przyciskami, na przykład gdy twój button ma działać tylko gdy naciśniesz na niego scrollem z jakiegoś powodu, gdy chcesz najzwyczajniej zwiększyć funkcjonalność niektórych elementów poza samym "Kliknij lewym na przycisk" :P. Albo dodać wyjście z programu gdy ktoś kliknie escape, bo bind() możesz przypisać do frame'a - minus/plus jest taki że kursor na tym elemencie musi się znajdować. Więc defakto da się zrobić w tym gui biedną gierkę xD.

W twoim przypadku, na start spróbuj zrobić funkcję do której się odwoła przycisk, w niej pobierzesz dane:

    def __init__(self, master):
        (...)
        self.pole = Entry(self).grid()
        zmienna = Button(self, text="jakiś tekst", command=self.do_something).grid()
        (...)
     def do_something(self):
        przechwytujemy = self.pole.get() #I tu dostajemy wpisany tekst przez użytkownika po zatwierdzeniu przyciskiem.

I ta metoda wydaje mi się najprostsza :)
Jak będziesz potrzebował coś więcej, mogę ci podesłać kilka mini programów które gdzieś tam kiedyś zrobiłem hobbystycznie ;P.
W sensie mam kilka własnych przykładowych by sobie najzwyczajniej przypominać niektóre mechanizmy/funkcje z tkinter'a zamiast je wyszukiwać w necie ;d.

0

Dzięki wielkie :D Rozumiem cały zamysł, jednak nie mam pojęcia co wpisać w (...), dopadła mnie totalna zaćma.Powinienem umieścić tam pętle? Jeśli możesz wytłumaczyć mi także co oznacza self.pole.( cos w rodzaju możliwości, czy dowolna użyta nazwa w funkcji)?

PS: Super , jeśli możesz mi podesłać jakieś przykładowe programiki, na pewno wyciągne z nich jakieś fajne wnioski :D

0

(...) - to reszta twojego okna w aplikacji itd.
a self.pole to pole globalne dla obiektu klasy. Dzięki temu nie musimy go przekazywać jako argument funkcji, pobieramy go po prostu z pól klasowych :).
To podstawowe zagadnienie z OOP, sam zrobiłeś klasę Application.
W PW podeślę ci kilka starych programów z tkinterem :). To powinno ci dać jako taki wstępny zarys możliwości :)

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