Programming Windows Python script uitvoeren in een c# project

Bauhaus

Well-known member
Ik wil dus een eenvoudig python script uitvoeren in een c# project in vs2022.
Het script toont een venster met een label en een button, maar in mijn project toont hij enkel het venster maar niet het label of de button.

python code:
Python:
import tkinter as tk

def button_clicked():
    label.config(text="Button Clicked!")

root = tk.Tk()
root.title("Tkinter Example")

label = tk.Label(root, text="Hello, Tkinter!")
label.pack()

button = tk.Button(root, text="Click Me", command=button_clicked)
button.pack()

root.mainloop()

c# code:
C#:
using System;
using System.Diagnostics;
using System.Windows.Forms;

namespace cytopywin2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void ExecutePythonScript()
        {
            string pythonPath = @"C:\Users\PC\AppData\Local\Microsoft\WindowsApps\python3.11.exe";
            string pythonScriptPath = @"D:\PythonScripts\tkinter-example.py";

            ProcessStartInfo psi = new ProcessStartInfo
            {
                FileName = pythonPath,
                Arguments = pythonScriptPath,
                RedirectStandardOutput = true,
                UseShellExecute = false,
                CreateNoWindow = true
            };

            using (Process process = new Process())
            {
                process.StartInfo = psi;
                process.OutputDataReceived += Process_OutputDataReceived;

                process.Start();
                process.BeginOutputReadLine();
                process.WaitForExit();
            }
        }

        private void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            if (!string.IsNullOrEmpty(e.Data))
            {
                textBoxOutput.Invoke(new Action(() =>
                {
                    textBoxOutput.AppendText(e.Data + Environment.NewLine);
                }));
            }
        }

        private void buttonRunPython_Click(object sender, EventArgs e)
        {
            ExecutePythonScript();
        }
    }
}

Het rare is dat hij wel dat venster toont maar niet de controls, je zou verwachten dat het alles of niets is.
 
Een paar punten om te overwegen:

  1. Python Pad: Zorg ervoor dat het pad naar de Python interpreter (python3.11.exe) correct is. Start cmd.exe en typ 'python' in zonder de aanhalingstekens en je zou de REPL moeten zien starten.
  2. Script Pad: Zorg ervoor dat het pad naar je Python script (tkinter-example.py) klopt en dat het script op die locatie aanwezig is.
  3. Permissies: Zorg ervoor dat de C#-applicatie de benodigde rechten heeft om de Python interpreter uit te voeren en toegang heeft tot het Python script.
  4. Python Output Weergeven: De C#-applicatie vangt de standaard output van het Python script op en voegt dit toe aan een textBoxOutput controle in het formulier. Maar aangezien het Python script een Tkinter GUI applicatie is, produceert het misschien niet veel standaard output. Dus het kan zijn dat je niet veel ziet in de textBoxOutput.
  5. Blokkerende Oproep: De process.WaitForExit(); oproep zal de C# applicatie blokkeren totdat het Python script is voltooid. Dit is prima voor korte scripts, maar als het Python script wacht op gebruikersinteractie (zoals bij een GUI), kan je C# applicatie vastlopen.
 
Terug
Bovenaan