wywołanie funcji

0

Napisałem taki przykład
Wpisuję liczbę np 400 w okno entry(nazwa - tabliczka_1)
Wciskam button_1 i super wartość z okienka wypisuje się w konsoli ale nie wychodzi poza funkcję
Jaka jest prawidłowa składnia aby przechwycić cos z pola wpisywanego i mieć to w zmiennej
linia print(f'to jest poza funkcją{a}')
Wykonuje sie Od razu bez wciśniecia prycisku

import tkinter
from PIL import Image , ImageTk
from tkinter import filedialog
import tkinter.ttk as ttk
def przechwyt():
    liczba=tabliczka_1.get()
    print(liczba)
    return liczba
korzen=tkinter.Tk()
korzen.geometry('600x600')
tabliczka_1=tkinter.Entry(korzen,bg='red',width=23)
tabliczka_2=tkinter.Entry(korzen,bg='red')
tabliczka_3=tkinter.Entry(korzen,bg='red')

przycisk_1=tkinter.Button(text='ok',command=przechwyt)
przycisk_2=tkinter.Button(text='ok')
przycisk_3=tkinter.Button(text='ok')
przycisk_1.grid(row=0,column=1)
przycisk_2.grid(row=1,column=1)
przycisk_3.grid(row=2,column=1)

tabliczka_1.grid(row=0,column=0)
tabliczka_2.grid(row=1,column=0)
tabliczka_3.grid(row=2,column=0)

a=przechwyt()
print(f'a to jest poza funkcją{a}')

korzen.mainloop()
1

Chyba się nie da. Nie zamienisz asynchronicznego kodu w synchroniczny.

Najwyżej co możesz zrobić to:

def przechwyt():
    liczba=tabliczka_1.get()
    do_stuff(liczba)

# ...

def do_stuff(a):
  print(f'a to jest poza funkcją{a}')

korzen.mainloop()
0

Też nie wiem jak to zrobić ale możesz spróbować użyć klasy tkinter.StringVar (jest jeszcze tkinker.IntVar , DoubleVar itp ), działa podobnie do zwykłych zmiennych pythonowych, ale posiada dodatkowe funkcje. Ta zmienna przechowa Ci wartość wpisana w Entry widget.

Może o to chodzi, ale zgaduje

Coś takiego jak tu ja :


import tkinter
def przechwyt():
    # przypisz wartosc z Entry widget
    new_value = tabliczka_1.get()
    # zaktualizuj etykiete po klinkieciu ok (aktualizacja zmiennej string_variable)
    string_variable.set(f"Wartość z pola wpisywanego: {new_value}")



korzen=tkinter.Tk()
korzen.geometry('600x600')

string_variable = tkinter.StringVar(korzen)

tabliczka_1=tkinter.Entry(korzen,bg='red',width=23)
tabliczka_2=tkinter.Entry(korzen,bg='red')
tabliczka_3=tkinter.Entry(korzen,bg='red')

przycisk_1=tkinter.Button(text='ok',command=przechwyt)
przycisk_2=tkinter.Button(text='ok')
przycisk_3=tkinter.Button(text='ok')
przycisk_1.grid(row=0,column=1)
przycisk_2.grid(row=1,column=1)
przycisk_3.grid(row=2,column=1)

tabliczka_1.grid(row=0,column=0)
tabliczka_2.grid(row=1,column=0)
tabliczka_3.grid(row=2,column=0)

#  wszedzie mozemy uzyc zmiennej string_variable która trzyma wartosc pola entry dopóki jej nie zaaktualizujemy pierwszym przyciskiem klikajac  ok
label = tkinter.Label(korzen, textvariable=string_variable, bg='yellow')
label.grid(row=0,column=2)


#ten print wykona sie tylko raz jak uruchamia sie program bez wartosci
print(f'a to jest poza funkcją{string_variable.get()}')


korzen.mainloop()

no i jeszcze coś takiego znalazlem :when-to-use-variable-classes-booleanvar-doublevar-intvar-stringvar

0

Tutaj jest bardzo dobry kurs o tkinter, wiele przydatnych informacji w tym o StringVar itp:

Jeżeli to za mało tutaj znajdziesz szczegółowe informacje (trzeba wyszukać w filmach tego youtubera):

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