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

jak wyprowadzić zmienną z funkcji do innej funkcji python

VPS Starter Arubacloud
+1 głos
391 wizyt
pytanie zadane 14 czerwca 2022 w Python przez koleś34 Gaduła (3,270 p.)
import tkinter
import socket

okno = tkinter.Tk()
okno.title("komunikator")
okno.geometry("500x600")

serwer_ip = "localhost"

class komunikator:

########## okno z ip serwera ##########
    def okno_ip(ekran_poczatkowy):
        text = tkinter.Label(okno, text="podaj adres ip serwera: ") #tekst "podaj adres ip serwera"
        text.place(x=0, y=0)

        ip_input = tkinter.Entry(okno, width=20) #pole tekstowe
        ip_input.place(x=0, y=30)

        button = tkinter.Button(okno, command=ekran_poczatkowy, height=1, width=10, text="prześlij") #przycisk
        button.place(x=0, y=70)

        serwer_ip = ip_input.get()

        okno.mainloop()

    def ekran_poczatkowy():
        pass

obiekt = komunikator

serwer = obiekt.okno_ip(obiekt.ekran_poczatkowy).ip_input.get()

print(serwer)

chodzi mi o to jak zrobić tak żeby po wystartowaniu tego ekranu gdzie się podaje ip okno_ip(), wpisaniu ip w pole tekstowe i przyciśnięcie przycisku, zmienić wartość ip_serwera na wpisaną w polu tekstowym. Już nawet bez obiektów żadnych tylko zwykłymi funkcjami bo męcze się z tym od godziny i do takiego czegoś doszedłem, próbowałem to zrobić returnem i napisać print(okno_ip(obiekt.ekran_poczatkowy)) ale nie działa

komentarz 14 czerwca 2022 przez Whiskey_Taster Pasjonat (15,610 p.)
Przechodząc od razu do meritum: kliknięcie buttona powinno wywołać jakiś event, w którym to dopiero pobierzesz wpisaną wartość i prześlesz ją dalej. Samo stworzenie przycisku nic Ci nie da, trzeba go jeszcze obsłużyć.
komentarz 14 czerwca 2022 przez koleś34 Gaduła (3,270 p.)
no jest tam command=(nazwa funkcji)
komentarz 14 czerwca 2022 przez Whiskey_Taster Pasjonat (15,610 p.)
Podajesz nazwę funkcji, która jest pusta i nic nie robi, więc ciężko to nazwać obsługą przycisku. Poza tym, ta funkcja to metoda Twojej klasy, więc powinieneś dać self.nazwa_metody

Ja rozumiem, że Python na wiele rzeczy pozwala, ale bez podstaw i dostatecznej uwagi za wiele nie zdziałasz, o czym każdy się kiedyś przekonał :)
komentarz 15 czerwca 2022 przez koleś34 Gaduła (3,270 p.)
tak, ale ja już to robiłem i nie działało :)

1 odpowiedź

+2 głosów
odpowiedź 15 czerwca 2022 przez VBService Ekspert (251,210 p.)
edycja 15 czerwca 2022 przez VBService

Zapisując tak kod

        ip_input = tkinter.Entry(okno, width=20) #pole tekstowe
        ip_input.place(x=0, y=30)
 
        button = tkinter.Button(okno, command=ekran_poczatkowy, height=1, width=10, text="prześlij") #przycisk
        button.place(x=0, y=70)
 
        serwer_ip = ip_input.get()
 
        okno.mainloop()

dane z ip_input są "pobierane" w trakcie "tworzenia" okienka aplikacji, zanim użytkownik zdąży cokolwiek wpisać, chyba nie o to Tobie chodziło  wink

Tak jak @Whiskey_Taster napisał Tobie, musisz dodać "akcję" do przycisku, która to po kliknięciu "pobierze" wartość z ip_input

 

przykład  (pozwoliłem sobie nieco uporządkować Twój kod wink )

import tkinter as tk
import socket
 
serwer_ip = 'localhost'

########## okno z ip serwera ########## 
class komunikator(tk.Tk):
    def __init__(self):
        super().__init__()
        top = tk.Frame(self)
        top.pack(side='top')

        self.title('Komunikator')
        self.geometry('500x600')
        
        padding = 5
        
        self.text = tk.Label(self, text='Podaj adres ip serwera:')
        self.text.place(x=padding, y=padding)
 
        self.ip_input = tk.Entry(self, width=20)
        self.ip_input.place(x=padding, y=30)
        self.ip_input.insert(0, serwer_ip) # domyślny tekst w polu
 
        self.button = tk.Button(self, command=self.uzyskaj_adres_ip_serwera, width=10, text='Prześlij')
        self.button.place(x=padding, y=60)

    def uzyskaj_adres_ip_serwera(self):
        serwer_ip = self.ip_input.get()
        print(serwer_ip)
 
if __name__ == '__main__':
    komunikator().mainloop()

 

Podobne pytania

0 głosów
1 odpowiedź 382 wizyt
+1 głos
1 odpowiedź 291 wizyt
pytanie zadane 25 lutego 2020 w Python przez PIxEL Nowicjusz (180 p.)
+1 głos
4 odpowiedzi 632 wizyt
pytanie zadane 10 września 2021 w Python przez Hajpa Użytkownik (880 p.)

92,452 zapytań

141,262 odpowiedzi

319,079 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...