Windows Forms C# mit Python verbinden?
Hallo,
ich habe mit Windows Forms in C# ein kleines ERP-Programm erstellt. In der Auftragsverwaltung meines ERP-Programms habe ich im DataGridView die Buttons "Rechnung erstellen" und "Angebot erstellen" für jeden erstellten Auftrag generiert. Wenn ich auf den Button "Rechnung erstellen" klicke, soll sich eine Rechnung generieren, die sich automatisch mit den Daten aus dem Programm oder der Datenbank (je nachdem, was einfacher ist) füllt und abspeichert. Dazu habe ich ein Python-Rechnungsprogramm erstellt, da dies sehr einfach war. Leider gelingt es mir jedoch nicht, diese Funktionen miteinander zu koppeln. Könnt ihr mir dort behilflich sein, oder gibt es eine einfache Funktion zur Rechnungserstellung in Windows Forms selbst?
Die Rechnung in Python sieht sehr professionell aus, deswegen würde ich sie gerne beibehalten. Wenn es jemanden interessiert, hier ist mein C#-Code (für die Auftragsverwaltung) und der Python-Code;
Auftragsverwaltung : Auftragsverwaltung - Pastebin.com
Rechnung : Rechnung - Pastebin.com
2 Antworten
var process = new Process
{
StartInfo =
{
FileName = "Pfad\zur\py",
Arguments = "Daten"
}
};
process.Start();
process.WaitForExit();
Das wars. ;-)
Einfach das Pythonskript mit den Nötigen Argumenten starten und warten, dass es fertig ist.
VG
Ich geb dir Recht, dass es besser wäre, wenn alles aus einem Guss wäre, aber in diesem Fall, wo es schon eine fertige GUI und ein fertiges Script für die Rechnung gibt (die nur aus einer json eine pdf macht, also problemlos per cmd aufrufbar ist), finde ich es unnötigen Aufwand, das umzubauen.
Mit TKinter ist es zwar einfach, Formulare zu bauen, aber die sehen meistens nicht grade schön aus (wobei die GUI sowieso in WinForms gebaut ist, was auch nicht viel besser ist) und um die PDFs in C# zu generieren müsste man erst ein ganzes Framework lernen, was ziemlich aufwändig und frustrierend sein kann.
Wenn, dann wäre es wohl das Beste, das ganze Projekt als Web-App neu zu bauen, aber das ist dann auch wieder ein Riesenaufwand. Ich lasse einfach dem Fragesteller die Wahl, was er jetzt genau umsetzt
🥵 ... Damit stülpst du lediglich Deine potenzielle GUI über ein Consolprogramm das ist Flickschusterei. wenn mans macht dann Richtig... und aus einem Guss
Leider gelingt es mir jedoch nicht, diese Funktionen miteinander zu koppeln.
...kann man einen Golf und einen Astra gleichzeitig fahren? ...ein schwieriges Unterfangen.
genauso verhält es sich mit 2 verschiedenen Programmphilosophien. Naturlich wäre es machbar in einer Dll die entsprechenden Schnittstellen auf die jeweils andergearteten Techniken bereitzustellen, und mit ctype auf diese zugreifen.
Im falle von C# und Python würde dies bedeuten, dass gleichzeitig der Pythoninterpreter , der C# JIT-Compiler und die nativen WindowsAPI ausgeführt werden müssen. Damit wird die Sache zum Resourcenfresser ohne Gleichen.
Du stellst Dir 3 Autos in die Garage , nur weil Dir die Farbe des einen gefällt, vom zweiten das Interieur und vom dritten der V8 ... ...und dann hüpfst Du von einem ins andere, nur fahren kannst Du keines. Nun kannst Du ja versuchen alle 3 Autos zu zerlegen und daraus ein neues zu bauen.... Viel Spass beim basteln!🤪🤮
genug der Analogien...:wähle die Sprache welche Dir an besten zusagt und arbeite mit deren Möglichkeiten:
Datenbankanbindung in C#
...oder die Erstellung der Oberfläche für Python
- https://realpython.com/python-gui-tkinter/
- https://wiki.python.org/moin/TkInter
- https://wiki.python.org/moin/GuiProgramming
Egel welche der Varianten Du nutzt, damit stellst Du Sicher, das Du ein Ergebnis erhältst , Welches aus einem Guss ist und desen Teile auch perfekt zusammenpassen..
Du warst doch sicher mal Kind dann sollte Dir folgendes bekannt sein:
Man bekommt die Teile irgendwie zusammengepappt, aber das Ergebnis wird nie perfekt...
und im Python-Script muss man natürlich die Argumente auslesen. Also entweder den Pfad zu der json-Datei, für die eine Rechnung erzeugt werden soll oder (ich weiß nicht nicht 100%ig, ob das klappt) die json-Daten direkt als Argument.
Im Python-Script kannst du so auf die Argumente zugreifen: