mikrocontroller.net

Forum: PC-Programmierung Python Parameterübergabe an andere Funktion


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wie kann ich diverse Parameter an eine andere Funktion übergeben?

Ich habe folgenden Aufbau
from tkinter import *
import threading
import tkinter as tk

class MyThread1 (threading.Thread):   
    def run(self):
        
        print(erhaltene_eingabe)
        #hier soll der übergebene Parameter verwendet werden





def test_button():
    def button_action_e():
        m =MyThread1();
        m.start()
        erhaltene_eingabe=eingabefeld.get()
       
    eingabefeld = Entry(text1, bd=4, width=40)

    eingabefeld.place(x = 100, y = 10, width=60, height=25)  
    set_button = Button(text1, text="Set", command=button_action_e)    
    set_button.place(x = 100, y = 295, width=60, height=25)
 

fenster = tk.Tk()
fenster.geometry('640x370')
text1 = Text(fenster, height=20, width=50)
text1.pack(side=LEFT)
menuleiste = Menu(fenster)
menuleiste.add_command(label="button", command=test_button)
fenster.config(menu=menuleiste)   
fenster.mainloop()

P.S.: Ich verwende Python 3.5 auf Windows

Autor: yesitsme (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
mach doch irgendwie sowas:
class MyThread1 (threading.Thread):   
    def run(self):
        
        print(erhaltene_eingabe)
        #hier soll der übergebene Parameter verwendet werden
        print(args, kwargs)

    def setParam(self, *args, **kwargs):
        self.args = args
        self.kwargs = kwargs


m =MyThread1();
m.setParam(1,2,3, test="abc")
m.start()

Autor: Sheeva P. (sheevaplug)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian schrieb:
> wie kann ich diverse Parameter an eine andere Funktion übergeben?

In diesem Falle: gar nicht.

> Ich habe folgenden Aufbau
> [c]
> from tkinter import *
> import threading
> import tkinter as tk

Zweimal "tkinter" importieren, einmal alle Symbole und dann nochmal als 
Modul? Hm.

> class MyThread1 (threading.Thread):
>     def run(self):
>
>         print(erhaltene_eingabe)
>         #hier soll der übergebene Parameter verwendet werden

Du kannst die Daten höchstens an den Konstruktor (_init_) von 
MyThread1 übergeben. Die Methode "run()" wird vom threading-Modul im 
Hintergrund benutzt, wenn Du die Methode start() Deiner von 
threading.Thread erbenden Klasse im Vordergrund aufrufst.

Ganz grundsätzlich ist es auch keine gute Idee, Tkinter mit dem 
threading-Modul zu benutzen, das kann zu sehr subtilen Fehlern führen 
und nutzt Dir vor allem meistens auch nichts, Stichwort Globel 
Interpreter Lock (GIL). Deswegen möchtest Du in Tkinter lieber die 
Methode after() benutzen.

Zuletzt möchte ich Dich auf das Python-Modul "multiprocessing" 
hinweisen, das mit dem Modul "threading" weitgehend API-kompatibel ist, 
aber eben ein echtes Mutliprocessing sowie verschiedene Möglichkeiten 
zur Kommunikation zwischen den Prozessen beinhaltet. Dieses Modul leidet 
nicht unter den Einschränkungen des GIL und soll (hab' ich noch nicht 
selbst probiert) reibungslos mit Tkinter kooperieren. HTH, YMMV.

Autor: Kaj G. (Firma: RUB) (bloody)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sheeva P. schrieb:
> Zuletzt möchte ich Dich auf das Python-Modul "multiprocessing"
> hinweisen, das mit dem Modul "threading" weitgehend API-kompatibel ist,
> aber eben ein echtes Mutliprocessing sowie verschiedene Möglichkeiten
> zur Kommunikation zwischen den Prozessen beinhaltet. Dieses Modul leidet
> nicht unter den Einschränkungen des GIL
Ich weiss nicht wie es mit tkinter ist, aber mit PyQt hatte ich da mal 
interessante Probleme unter Windows, in verbindung mit dem 
multiprocessing-Modul.
Beitrag "Re: Python3/PyQt5/Windows - bei multiprocessing wir die gui mehrfach erzeugt"

Das aber nur als Anmerkung.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.