• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python GUI tkinker - Button, wiązanie zdarzeń

42 Warsaw Coding Academy
0 głosów
461 wizyt
pytanie zadane 2 lipca 2019 w Python przez Nieprofesjonalny Użytkownik (890 p.)

Witam, piszę program Jaka to liczba, wykorzystujący interfejs GUI, napotkałem pewien problem. Poniżej wklejam klasę aplikacji. Problem polega na tym, że metoda check_answer jest wywoływana automatycznie, mimo że powiązałem to zdarzenie z kliknięciem przycisku quess_bttn.

class Application(Frame):
    """Aplikacja wykorzystująca GUI"""

    def __init__(self, master):
        super(Application, self).__init__(master)
        self.grid()
        self.correct = random.randint(1, 100)
        self.create_widgets()

    def create_widgets(self):
        """Utwórz widżety Button, Entry, Label"""
        # Stwórz etykietę z nazwą
        Label(self, text="Jaka to liczba?").grid(row=0, column=0, sticky=W)

        # Stwórz etykietę z opisem gry
        rules = "Wylosowałem liczbę z zakresu 1 do 100."
        self.rules_lbl = Label(self, text=rules).grid(row=1, column=0, columnspan=2, sticky=W)
        self.quess_lbl = Label(self, text="Zgadnij jaką:").grid(row=2, column=0, sticky=W)
        self.quess_ent = Entry(self)
        self.quess_ent.grid(row=2, column=1, sticky=W)
        self.quess_bttn = Button(self, text="Akceptuj", command=self.check_answer())
        self.quess_bttn.grid(row=2, column=2, sticky=W)

    def check_answer(self):
        """Sprawdź odpowiedź i wypisz odpowiednią informację"""
        quess = self.quess_ent.get()
        if quess:
            quess = int(quess)
            if quess > self.correct:
                message = "Za duża!"
            elif quess < self.correct:
                message = "Za mała!"
            else:
                message = "Zgadłeś"
            self.quess_info = Label(self, text=message).grid(row=3, column=0, sticky=W)

Tutaj sam przycisk:

self.quess_bttn = Button(self, text="Akceptuj", command=self.check_answer())
self.quess_bttn.grid(row=2, column=2, sticky=W)

Oraz funkcja check_answer (if quess dodany, bo inczej wywalało program)

    def check_answer(self):
        """Sprawdź odpowiedź i wypisz odpowiednią informację"""
        quess = self.quess_ent.get()
        if quess:
            quess = int(quess)
            if quess > self.correct:
                message = "Za duża!"
            elif quess < self.correct:
                message = "Za mała!"
            else:
                message = "Zgadłeś"
            self.quess_info = Label(self, text=message).grid(row=3, column=0, sticky=W)

 

1 odpowiedź

+1 głos
odpowiedź 2 lipca 2019 przez mokrowski Mędrzec (158,440 p.)
self.quess_bttn = Button(self, text="Akceptuj", command=self.check_answer)

 

komentarz 3 lipca 2019 przez Nieprofesjonalny Użytkownik (890 p.)
Bardzo dziękuje za odpowiedź, teraz działa bezbłędnie. Mam jednak pytanie dlaczego nie może być tutaj nawiasów? Bo zwykle kiedy nie umieszcza się argumentów w metodzie, to nawiasy zostawia się puste, a tutaj ich w ogóle nie ma
komentarz 3 lipca 2019 przez mokrowski Mędrzec (158,440 p.)

Argumentem command jest obiekt na którym wywoływane jest działanie.

Podobne pytania

0 głosów
0 odpowiedzi 1,125 wizyt
+2 głosów
0 odpowiedzi 1,052 wizyt
pytanie zadane 9 grudnia 2016 w Python przez patryk23 Początkujący (290 p.)
0 głosów
1 odpowiedź 986 wizyt

93,386 zapytań

142,385 odpowiedzi

322,547 komentarzy

62,748 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...