Reagowanie na kliknięcie w przycisk

0

Witam, mam problem z OOP. jak z przycisku file_menu.add_command(label="Previous Photo", command=get_prev) dostać się do tak zbudowanej (muszę mieć taki układ kodu) funkcji def get_prev() aby odstać print('abc'). Moją wiedzę psuje command i obecnie nie wiem jak to zrobić. To jest testowa funkcja, działa testowo po zamianie na file_menu.add_command(label="Previous Photo", command=self.get_counter) i ew za komentowaniu linijek kodu metody get_prev(). Dziękuję za pomoc :D

import tkinter as tk

class Calculation:
    def __init__(self, get_prev=None):
        self.root = tk.Tk()
        self.buttonClicked = False

        menu = tk.Menu(self.root)
        file_menu = tk.Menu(menu)
        self.root.config(menu=file_menu)
        self.file_menu = menu

        filemenu = tk.Menu(file_menu, tearoff=0)

        file_menu.add_cascade(label="File", menu=filemenu)


        # Image
        file_menu.add_command(label="Previous Photo", command=get_prev)

        ...

    def get_counter(self, get_prev=None):
        print('First function')

        def get_prev():
            if self.buttonClicked:
                self.buttonClicked = False
            if not self.buttonClicked:
                self.buttonClicked = True
            ...

        if get_prev():
            print('abc')

app = Calculation(tk.Tk())
app.root.mainloop()
2

jeżeli było by to tak napisane

def get_counter(self, get_prev=None):
        print('First function')

        def get_prev():
            if self.buttonClicked:
                self.buttonClicked = False
            if not self.buttonClicked:
                self.buttonClicked = True
            print('1234')

to można by się dostać tak

file_menu.add_command(label="Previous Photo", command= lambda : self.get_counter(get_prev))

ale nie wiem czy o to ci chodzi

0
reich napisał(a):

jeżeli było by to tak napisane

def get_counter(self, get_prev=None):
        print('First function')

        def get_prev():
            if self.buttonClicked:
                self.buttonClicked = False
            if not self.buttonClicked:
                self.buttonClicked = True
            print('1234')

to można by się dostać tak

file_menu.add_command(label="Previous Photo", command= lambda : self.get_counter(get_prev))

ale nie wiem czy o to ci chodzi

Próbowałem tego rozwiązania z argumentami wcześniej ale nie działa.. :/ (są wyszarzone) i muszę mieć "if" poza metodą wewnętrzną (to tylko kawałem kodu), zaś lambda to dobry pomysł, ale jeszcze nie działa..

1

Gdybyś z, file_menu zrobił "instance variable", (czyli, self.file_menu) to w środku, get_counter, dostałbyś się do niej przez, self....

0
lion137 napisał(a):

Gdybyś z, file_menu zrobił "instance variable", (czyli, self.file_menu) to w środku, get_counter, dostałbyś się do niej przez, self....

"instance variable" - spowodował że straciłem menu..

1
Mr Coin napisał(a):
lion137 napisał(a):

"instance variable" - spowodował że straciłem menu..

Zapewniam cię że nie "instance variable" - spowodował zaś niepoprawna realizacja tego pomysłu.
Szklana kula wskazuje że błąd jest w wierszu 42.

0
_13th_Dragon napisał(a):
Mr Coin napisał(a):
lion137 napisał(a):

"instance variable" - spowodował że straciłem menu..

Zapewniam cię że nie "instance variable" - spowodował zaś niepoprawna realizacja tego pomysłu.
Szklana kula wskazuje że błąd jest w wierszu 42.

Dziękuję za wskazówkę :D

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