Python Parameterübergabe an andere Funktion

Gast #5237240
Lesenswert?

Hallo,
wie kann ich diverse Parameter an eine andere Funktion übergeben?

Ich habe folgenden Aufbau
1
from tkinter import *
2
import threading
3
import tkinter as tk
4

5
class MyThread1 (threading.Thread):   
6
    def run(self):
7
        
8
        print(erhaltene_eingabe)
9
        #hier soll der übergebene Parameter verwendet werden
10

11

12

13

14

15
def test_button():
16
    def button_action_e():
17
        m =MyThread1();
18
        m.start()
19
        erhaltene_eingabe=eingabefeld.get()
20
       
21
    eingabefeld = Entry(text1, bd=4, width=40)
22

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

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

P.S.: Ich verwende Python 3.5 auf Windows
Gast #5237244
Lesenswert?

mach doch irgendwie sowas:
1
class MyThread1 (threading.Thread):   
2
    def run(self):
3
        
4
        print(erhaltene_eingabe)
5
        #hier soll der übergebene Parameter verwendet werden
6
        print(args, kwargs)
7

8
    def setParam(self, *args, **kwargs):
9
        self.args = args
10
        self.kwargs = kwargs
11

12

13
m =MyThread1();
14
m.setParam(1,2,3, test="abc")
15
m.start()
#5237248
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.
(Firma: RUB) #5237325
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren