Liczenie ilości wykonania dwóch osobnych akcji

0

Witam,
potrzebuję mieć dwie oddzielne akcje w metodzie (jak kliknę przycisk Next to powinienem dostać 0, 1, 2.. jak Prev 0 5 4, zakładając że mam 6 elementów do badania). Obecnie jest jakiś błąd i nie wiem co robię źle bo nie zależnie czy kliknę Next czy Prev dostaję wynik tylko z Next. Wiem że można liczniki zrobić poza metodą ale ja potrenuję je mieć w tej metodzie, a nie poza nią. Proszę o pomoc, dziękuję :D

import tkinter as tk


class Calc:
    def __init__(self, root, get_prev=None, get_next=None):
        self.root = root
        self.counter_next = 0
        self.counter_prev = 0

        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", command=lambda: self.get_my_function(get_prev))
        file_menu.add_command(label="Next", command=lambda: self.get_my_function(get_next))


    def get_my_function(self, get_next=None, get_prev=None):

        var = get_next
        vap = get_prev

        def get_next():
            self.counter_next += 1
            return self.counter_next
        next = get_next()

        def get_prev():
            self.counter_prev -= 1
            return self.counter_prev
        prev = get_prev()

        for _ in range(1):
            if next:
                print('next', next)
                break
            elif prev:
                print('prev', prev)


app = tk.Tk()
Calc(app).get_my_function()
app.mainloop()
1

@Mr Coin:

Czytam, czytam, czytam ... może w tych latach nie jestem aktywnym pythonistą, ale jak dla mnie zrobiłeś dużo, aby to sztucznie ułożyć.

Dlaczego nie "normalnie" ?
Tzn trochę wiem dlaczego, jakby przesunąć z ujecia proceduralnego do obiektowego, by chyba było łatwiej.

0
ZrobieDobrze napisał(a):

@Mr Coin:

Czytam, czytam, czytam ... może w tych latach nie jestem aktywnym pythonistą, ale jak dla mnie zrobiłeś dużo, aby to sztucznie ułożyć.

Dlaczego nie "normalnie" ?
Tzn trochę wiem dlaczego, jakby przesunąć z ujecia proceduralnego do obiektowego, by chyba było łatwiej.

Ok, to jest fragment dużego kodu który piszę i w tym wrzuciłem na zapytanie sam problem. Ogólnie mogę wyjść poza metodę ale i tak w tej metodzie muszę wywołać te dwie funkcje. A efekt jak wyjdę poza mam ten sam :/ tzn problem, nie rozumiem czemu mi się wywołuję albo dwie funkcje na raz ale tylko 1 nie zależnie który przycisk wcisnę :.

0

@Mr Coin:

Mi źle pachnie przypisanie do zdarzeń widgetów lambdy, nie umiem sobie wyobrazić jak to jest wartościowane, jakim kontekstem wypełniane.
Gdyby to był mój kod, usilnie bym się starał, aby tam była funkcja prosta (bezargumentowa) jedna z dwóch, zwłaszcza że oliwa sprawiedliwa, i tak masz rozdwojone funkcje (to prawdopodbnie nie do unikniecia), tylko inaczej
Odwrócił bym wewnętrzne funkcje z zewnętrzną

0
ZrobieDobrze napisał(a):

@Mr Coin:

Mi źle pachnie przypisanie do zdarzeń widgetów lambdy, nie umiem sobie wyobrazić jak to jest wartościowane, jakim kontekstem wypełniane.
Gdyby to był mój kod, usilnie bym się starał, aby tam była funkcja prosta (bezargumentowa) jedna z dwóch, zwłaszcza że oliwa sprawiedliwa, i tak masz rozdwojone funkcje (to prawdopodbnie nie do unikniecia), tylko inaczej
Odwrócił bym wewnętrzne funkcje z zewnętrzną

Masz rację ale nie zawsze tak się da, temat zamknięty. Ludzie na Stacku mi pomogli, problem rozwiązany :D.

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