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


von Sebastian (Gast)


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

von yesitsme (Gast)


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()

von Sheeva P. (sheevaplug)


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.

von Kaj G. (Firma: RUB) (bloody)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.