TKINTER, definierte Funktion wird nicht erkannt
Hallo,
ich habe hier in Python eine Funktion "openbrowser" definiert.
Als kleine Testaufgabe soll es eine PowerShell-Script ausführen, die dann Firefox öffnet.
Um Firefox zu öffnen ist der Weg denkbar übertrieben kompliziert. Ich teste damit lediglich wie Python GUI mit Powershell zusammenarbeiten kann.
Hier ist also die Funktion:
(EDIT: open_browser_btn.configure(command=lambda: Utility.openbrowser(POWERSHELL_PATH)) war nachträglich als Korrektur eingefügt. Ohne dies wurde die Script immer ausgeführt nicht nur beim Klick aufs Button.)
Ich bekomme bei Ausführung die folgende Fehlermeldung:
Ich verstehe nicht, warum "openbrowser" undefiniert gilt. Ich habe die Funktion ja eindeutig im Code.
Woran kann es liegen? Hätte ich hier zuerst mit der definierten "Klasse" arbeiten müssen?
I.
ich habe hier in Python eine Funktion "openbrowser" definiert.
Als kleine Testaufgabe soll es eine PowerShell-Script ausführen, die dann Firefox öffnet.
Um Firefox zu öffnen ist der Weg denkbar übertrieben kompliziert. Ich teste damit lediglich wie Python GUI mit Powershell zusammenarbeiten kann.
Hier ist also die Funktion:
import subprocess # IMPORT FOR SUB PROCESS . RUN METHOD
POWERSHELL_PATH = "C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe" # POWERSHELL EXE PATH
ps_script_path = "C:\\Users\\mr3968\\PycharmProjects\\SystemScriptWithGUI\\Powershell_Scripts\\browser.ps1" # YOUR POWERSHELL FILE PATH
class Utility: # SHARED CLASS TO USE IN OUR PROJECT
@staticmethod # STATIC METHOD DEFINITION
def openbrowser(script_path, *params): # SCRIPT PATH = POWERSHELL SCRIPT PATH, PARAM = POWERSHELL SCRIPT PARAMETERS ( IF ANY )
commandline_options = [POWERSHELL_PATH, '-ExecutionPolicy', 'Unrestricted', ps_script_path] # ADD POWERSHELL EXE AND EXECUTION POLICY TO COMMAND VARIABLE
for param in params: # LOOP FOR EACH PARAMETER FROM ARRAY
commandline_options.append("'" + param + "'") # APPEND YOUR FOR POWERSHELL SCRIPT
process_result = subprocess.run(commandline_options, stdout = subprocess.PIPE, stderr = subprocess.PIPE, universal_newlines = True) # CALL PROCESS
print(process_result.returncode) # PRINT RETURN CODE OF PROCESS 0 = SUCCESS, NON-ZERO = FAIL
print(process_result.stdout) # PRINT STANDARD OUTPUT FROM POWERSHELL
print(process_result.stderr) # PRINT STANDARD ERROR FROM POWERSHELL ( IF ANY OTHERWISE ITS NULL|NONE )
if process_result.returncode == 0: # COMPARING RESULT
Message = "Success !"
else:
Message = "Error Occurred !"
return Message # RETURN MESSAGE
#ich lege hier einen neuen Reiter bzw. ein neues Button an
powershell_frame = ttk.Frame(notebook)
notebook.add(powershell_frame, text='Browser öffnen', underline=0)
powershell_frame.columnconfigure(2, weight=1)
powershell_frame.rowconfigure(1, weight=1)
# button um die Funktion "openbrowser" aufzurufen.
open_browser_btn = ttk.Button(
powershell_frame,
text='Öffne den browser'
)
open_browser_btn.grid(sticky=tk.E, ipadx=5, ipady=5)
open_browser_btn.configure(command=lambda: Utility.openbrowser(POWERSHELL_PATH))
(EDIT: open_browser_btn.configure(command=lambda: Utility.openbrowser(POWERSHELL_PATH)) war nachträglich als Korrektur eingefügt. Ohne dies wurde die Script immer ausgeführt nicht nur beim Klick aufs Button.)
Ich bekomme bei Ausführung die folgende Fehlermeldung:
File "C:\Users\mr3968\PycharmProjects\SystemScriptWithGUI\Istvan_TestApp\PowershellGUI.py", line 209, in <module>
open_browser_btn.configure(command=openbrowser)
NameError: name 'openbrowser' is not defined
Ich verstehe nicht, warum "openbrowser" undefiniert gilt. Ich habe die Funktion ja eindeutig im Code.
Woran kann es liegen? Hätte ich hier zuerst mit der definierten "Klasse" arbeiten müssen?
I.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1592961619
Url: https://administrator.de/contentid/1592961619
Ausgedruckt am: 21.11.2024 um 20:11 Uhr
4 Kommentare
Neuester Kommentar