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

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.