Compare commits

34 Commits

Author SHA1 Message Date
5bc9206bc0 Data.csv gelöscht 2024-08-05 22:24:19 +02:00
e010d1de02 .gitignore aktualisiert 2024-08-05 22:24:07 +02:00
5a08029bad Readme.md aktualisiert 2024-08-05 22:19:01 +02:00
3e410de064 Readme.md aktualisiert 2024-08-05 22:18:21 +02:00
dcc9ef6801 Readme.md aktualisiert 2024-08-05 22:16:45 +02:00
ee7194d439 installer.sh aktualisiert 2024-08-05 22:07:44 +02:00
1bc44a8dc8 installer.sh aktualisiert 2024-08-05 21:50:50 +02:00
aca293eb6a installer.sh erstellt um Installation zu vereinfachen. 2024-08-05 21:34:13 +02:00
88ba988c1e requirements.txt aktualisiert 2024-08-05 21:29:45 +02:00
705dcaa9a9 Abgabe der Arbeit. 2024-07-26 12:03:37 +02:00
d4533ea54c Passwort geändert auf 976638. 2024-07-26 09:47:19 +02:00
2563626def Passwortschutz eingeführt. 2024-07-25 16:39:55 +02:00
bff7daff82 PID Parameter angepasst. 2024-07-25 15:49:11 +02:00
d1f32f1719 Software sollte nun richtig beendet werden. 2024-07-23 13:45:11 +02:00
2afb5fa266 Reihenfolge der Bedienelemente umgestellt. 2024-07-23 13:32:57 +02:00
75a1f05dc8 Logo eingefügt. 2024-07-23 13:31:10 +02:00
7a077b4879 Optimierung LSP1 Kommunikation 2024-07-23 11:16:47 +02:00
3fe31f6bf0 Optimierung LSP1 Kommunikation 2024-07-23 11:15:51 +02:00
4df758ccf1 Optimierung LSP1 Kommunikation 2024-07-23 11:13:47 +02:00
b12a416110 Optimierung LSP1 Kommunikation 2024-07-23 11:09:21 +02:00
897bb59e01 Konfigurationen angepasst, Schnittstelle schneller gemacht. 2024-07-23 10:42:49 +02:00
5685eebe2c Merge pull request 'feature_lsp_com' (#9) from feature_lsp_com into main
Reviewed-on: https://gitea.msb24.duckdns.org/musabe24/t2000_gui/pulls/9
2024-07-22 12:15:25 +02:00
f2ed9c9724 typo fix 2024-07-22 12:14:50 +02:00
db17fbc1d9 Optimierung LSP Schnittstelle 2024-07-22 12:12:56 +02:00
451cd9bc68 Optimierung der LSP Schnittstelle 2024-07-22 11:55:41 +02:00
f8d788d92e Optimierung der LSP Schnittstelle 2024-07-22 11:54:12 +02:00
b1ceb7c913 Optimierung der LSP Schnittstelle 2024-07-22 11:53:03 +02:00
ac2180b041 Optimierung der LSP Schnittstelle 2024-07-22 11:51:11 +02:00
729bf18aec Optimierung der LSP Schnittstelle 2024-07-22 11:49:23 +02:00
6013acc226 Optimierung der LSP Schnittstelle 2024-07-22 11:47:42 +02:00
945e088667 Optimierung der LSP Schnittstelle 2024-07-22 11:45:38 +02:00
8269b5112f Optimierung der LSP Schnittstelle 2024-07-22 11:43:21 +02:00
582bdec6c5 Optimierung der LSP Schnittstelle 2024-07-22 11:41:57 +02:00
74c7746142 Optimierung der LSP Schnittstelle 2024-07-22 11:09:36 +02:00
8 changed files with 130 additions and 72 deletions

3
.gitignore vendored
View File

@@ -1 +1,2 @@
.venv/ .venv/
*.csv

View File

@@ -0,0 +1,30 @@
0;0
4.9;0
5;5
9.9;5
10;7
14.9;7
15;10
19.9;10
20;12
24.9;12
25;15
29.9;15
30;17
34.9;17
35;15
39.9;15
40;12
44.9;12
45;10
49.9;10
50;7
54.9;7
55;5
59.9;5
60;0
69.9;0
70;15
79.9;15
80;0
90;0

View File

@@ -1,8 +0,0 @@
Kp 0,110
Ki 0,080
Kd 0,000
Zeit in s Winkel in Grad Sollwert in Nm Istwert in Nm Erregerspannung in V
0,200 4,032 0,000 0,692 0,000
1,033 4,032 0,000 0,598 0,000
1,897 4,032 0,000 0,655 0,000
2,631 4,032 0,000 0,681 0,000
1 Kp 0,110
2 Ki 0,080
3 Kd 0,000
4 Zeit in s Winkel in Grad Sollwert in Nm Istwert in Nm Erregerspannung in V
5 0,200 4,032 0,000 0,692 0,000
6 1,033 4,032 0,000 0,598 0,000
7 1,897 4,032 0,000 0,655 0,000
8 2,631 4,032 0,000 0,681 0,000

View File

@@ -1 +1,5 @@
# GUI zur T2000 # GUI zur T2000
## Installation unter Linux
~~~
curl -s https://gitea.msb24.duckdns.org/musabe24/t2000_gui/raw/branch/main/installer.sh | bash
~~~

View File

@@ -1,15 +1,10 @@
227C-024-15 PID_Regler 1{ 227C-024-15{
Kp:0.068
Ki:0.03
Kd:0.00
}
227C-024-15 PID_Regler 2{
Kp:0.11 Kp:0.11
Ki:0.08 Ki:0.09
Kd:0.00 Kd:0.00
} }
227C-024-15 I-Regler{ 328CS-024-10{
Kp:0.00 Kp:0.3
Ki:0.02 Ki:1.0
Kd:0.00 Kd:0.00
} }

7
installer.sh Normal file
View File

@@ -0,0 +1,7 @@
#!/bin/bash
sudo apt-get install python3-tk -y
cd ~
git clone https://gitea.msb24.duckdns.org/musabe24/t2000_gui.git
cd t2000_gui
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt

127
main.py
View File

@@ -1,5 +1,5 @@
import tkinter as tk import tkinter as tk
from tkinter import ttk, messagebox from tkinter import ttk, messagebox, PhotoImage, simpledialog
import customtkinter import customtkinter
customtkinter.set_appearance_mode("light") customtkinter.set_appearance_mode("light")
customtkinter.set_default_color_theme("blue") customtkinter.set_default_color_theme("blue")
@@ -12,6 +12,7 @@ import time
import numpy as np import numpy as np
import csv import csv
import os import os
from PIL import Image, ImageTk
class ArduinoGUI: class ArduinoGUI:
def __init__(self, root): def __init__(self, root):
@@ -81,75 +82,88 @@ class ArduinoGUI:
def create_widgets(self): def create_widgets(self):
# Laden und Skalieren des Logos
original_image = Image.open("src/logo1.png")
resized_image = original_image.resize((500, 121), Image.LANCZOS) # Passen Sie die Größe (200, 100) nach Bedarf an
self.logo_image = ImageTk.PhotoImage(resized_image)
# Logo anstelle des Platzhalters
self.logo_label = customtkinter.CTkLabel(self.root, image=self.logo_image, text="")
self.logo_label.image = self.logo_image # Referenz behalten, um Garbage Collection zu verhindern
self.logo_label.grid(row=0, column=0, columnspan=3, padx=(10, 5), pady=(10, 0), sticky="w")
# Placeholer
self.placeholer = customtkinter.CTkLabel(self.root, text="")
self.placeholer.grid(row=1, column=0, padx=(10, 5), pady=(10, 0), sticky="w")
# Labels and ComboBox for Stellantriebstyp # Labels and ComboBox for Stellantriebstyp
self.stellantriebstyp_label = customtkinter.CTkLabel(self.root, text="Stellantriebstyp:", font=self.my_font) self.stellantriebstyp_label = customtkinter.CTkLabel(self.root, text="Stellantriebstyp:", font=self.my_font)
self.stellantriebstyp_label.grid(row=0, column=0, padx=(10, 5), pady=(10, 0), sticky="w") self.stellantriebstyp_label.grid(row=3, column=0, padx=(10, 5), pady=(10, 0), sticky="w")
self.config_combobox_value = customtkinter.StringVar() self.config_combobox_value = customtkinter.StringVar()
self.config_combobox = customtkinter.CTkComboBox(self.root, variable=self.config_combobox_value, state="readonly", font=self.my_font) self.config_combobox = customtkinter.CTkComboBox(self.root, variable=self.config_combobox_value, state="readonly", font=self.my_font)
self.config_combobox.grid(row=0, column=1, columnspan=1, padx=(0, 10), pady=(10, 0), sticky="ew") self.config_combobox.grid(row=3, column=1, columnspan=1, padx=(0, 10), pady=(10, 0), sticky="ew")
#self.config_combobox.bind("<<ComboboxSelected>>", self.on_config_selected) #self.config_combobox.bind("<<ComboboxSelected>>", self.on_config_selected)
# Setzen Button für Stellantriebstyp # Setzen Button für Stellantriebstyp
self.set_pid_button = customtkinter.CTkButton(self.root, text="Setzen", command=self.set_pid_parameters, font=self.my_font) self.set_pid_button = customtkinter.CTkButton(self.root, text="Setzen", command=self.set_pid_parameters, font=self.my_font)
self.set_pid_button.grid(row=0, column=2, padx=(0, 10), pady=(10, 0), sticky="ew") self.set_pid_button.grid(row=3, column=2, padx=(0, 10), pady=(10, 0), sticky="ew")
# Labels and ComboBox for COM Port # Labels and ComboBox for COM Port
self.com_label = customtkinter.CTkLabel(self.root, text="COM Port:", font=self.my_font) self.com_label = customtkinter.CTkLabel(self.root, text="COM Port:", font=self.my_font)
self.com_label.grid(row=1, column=0, padx=(10, 5), pady=(10, 0), sticky="w") self.com_label.grid(row=2, column=0, padx=(10, 5), pady=(10, 0), sticky="w")
self.combobox_value = customtkinter.StringVar() self.combobox_value = customtkinter.StringVar()
self.combobox = customtkinter.CTkComboBox(self.root, variable=self.combobox_value, font=self.my_font) self.combobox = customtkinter.CTkComboBox(self.root, variable=self.combobox_value, font=self.my_font)
self.combobox.configure(values=[port.device for port in self.ports]) self.combobox.configure(values=[port.device for port in self.ports])
self.combobox.grid(row=1, column=1, padx=(0, 10), pady=(10, 0), sticky="ew") self.combobox.grid(row=2, column=1, padx=(0, 10), pady=(10, 0), sticky="ew")
self.connect_button = customtkinter.CTkButton(self.root, text="Verbinden", command=self.connect_arduino, font=self.my_font) self.connect_button = customtkinter.CTkButton(self.root, text="Verbinden", command=self.connect_arduino, font=self.my_font)
self.connect_button.grid(row=1, column=2, padx=(0, 10), pady=(10, 0), sticky="ew") self.connect_button.grid(row=2, column=2, padx=(0, 10), pady=(10, 0), sticky="ew")
# Setpoint entry # Setpoint entry
self.setpoint_label = customtkinter.CTkLabel(self.root, text="Sollwerteingabe in Nm:", font=self.my_font) self.setpoint_label = customtkinter.CTkLabel(self.root, text="Sollwerteingabe in Nm:", font=self.my_font)
self.setpoint_label.grid(row=2, column=0, padx=(10, 5), pady=(10, 0), sticky="w") self.setpoint_label.grid(row=4, column=0, padx=(10, 5), pady=(10, 0), sticky="w")
self.setpoint_entry = customtkinter.CTkEntry(self.root, font=self.my_font) self.setpoint_entry = customtkinter.CTkEntry(self.root, font=self.my_font)
self.setpoint_entry.grid(row=2, column=1, padx=(0, 10), pady=(10, 0), sticky="ew") self.setpoint_entry.grid(row=4, column=1, padx=(0, 10), pady=(10, 0), sticky="ew")
self.set_setpoint_button = customtkinter.CTkButton(self.root, text="Setzen", command=self.set_setpoint, font=self.my_font) self.set_setpoint_button = customtkinter.CTkButton(self.root, text="Setzen", command=self.set_setpoint, font=self.my_font)
self.set_setpoint_button.grid(row=2, column=2, padx=(0, 10), pady=(10, 0), sticky="ew") self.set_setpoint_button.grid(row=4, column=2, padx=(0, 10), pady=(10, 0), sticky="ew")
# Multi Setpoints Textbox and Button # Multi Setpoints Textbox and Button
self.multi_setpoints_label = customtkinter.CTkLabel(self.root, text="Sollwerteeingabe\n(Winkel;Drehmoment):", font=self.my_font) self.multi_setpoints_label = customtkinter.CTkLabel(self.root, text="Sollwerteeingabe\n(Winkel;Drehmoment):", font=self.my_font)
self.multi_setpoints_label.grid(row=3, column=0, padx=(10, 5), pady=(10, 0), sticky="w") self.multi_setpoints_label.grid(row=5, column=0, padx=(10, 5), pady=(10, 0), sticky="w")
self.multi_setpoints_text = customtkinter.CTkTextbox(self.root, font=self.my_font) self.multi_setpoints_text = customtkinter.CTkTextbox(self.root, font=self.my_font)
self.multi_setpoints_text.grid(row=3, column=1, padx=(0, 10), pady=(10, 0), sticky="ew") self.multi_setpoints_text.grid(row=5, column=1, padx=(0, 10), pady=(10, 0), sticky="ew")
self.send_multi_setpoints_button = customtkinter.CTkButton(self.root, text="Sollwerte senden", command=self.send_multi_setpoints, font=self.my_font) self.send_multi_setpoints_button = customtkinter.CTkButton(self.root, text="Sollwerte senden", command=self.send_multi_setpoints, font=self.my_font)
self.send_multi_setpoints_button.grid(row=3, column=2, padx=(0, 10), pady=(10, 0), sticky="ew") self.send_multi_setpoints_button.grid(row=5, column=2, padx=(0, 10), pady=(10, 0), sticky="ew")
# Analog Control CheckBox # Analog Control CheckBox
self.checkbox_var = customtkinter.IntVar() self.checkbox_var = customtkinter.IntVar()
self.checkbox = customtkinter.CTkCheckBox(self.root, text="Analogsteuerung", variable=self.checkbox_var, command=self.input_source_Switch, font=self.my_font) self.checkbox = customtkinter.CTkCheckBox(self.root, text="Analogsteuerung", variable=self.checkbox_var, command=self.input_source_Switch, font=self.my_font)
self.checkbox.grid(row=4, column=0, columnspan=3, padx=(10, 10), pady=(10, 0), sticky="w") self.checkbox.grid(row=6, column=0, columnspan=3, padx=(10, 10), pady=(10, 0), sticky="w")
# Tare and Demagnetize Buttons # Tare and Demagnetize Buttons
self.tare_button = customtkinter.CTkButton(self.root, text="Drehwinkel tarieren", command=self.tare_angle, font=self.my_font) self.tare_button = customtkinter.CTkButton(self.root, text="Drehwinkel tarieren", command=self.tare_angle, font=self.my_font)
self.tare_button.grid(row=5, column=0, padx=(10, 5), pady=(10, 0), sticky="sew") self.tare_button.grid(row=7, column=0, padx=(10, 5), pady=(10, 0), sticky="sew")
self.demag_button = customtkinter.CTkButton(self.root, text="Manuelle Entmagnetisierung", command=self.demagnetize, font=self.my_font) self.demag_button = customtkinter.CTkButton(self.root, text="Manuelle Entmagnetisierung", command=self.demagnetize, font=self.my_font)
self.demag_button.grid(row=5, column=1, padx=(0, 5), pady=(10, 0), sticky="sew") self.demag_button.grid(row=7, column=1, padx=(0, 5), pady=(10, 0), sticky="sew")
# Exit Button # Exit Button
self.exit_button = customtkinter.CTkButton(self.root, text="Beenden", command=self.on_closing, font=self.my_font) self.exit_button = customtkinter.CTkButton(self.root, text="Beenden", command=self.on_closing, font=self.my_font)
self.exit_button.grid(row=5, column=2, padx=(0, 10), pady=(10, 0), sticky="sew") self.exit_button.grid(row=7, column=2, padx=(0, 10), pady=(10, 0), sticky="sew")
#Datalogger #Datalogger
self.datalogger_button = customtkinter.CTkButton(self.root, text="Datenlogger", command=self.toggle_datalogger, font=self.my_font) self.datalogger_button = customtkinter.CTkButton(self.root, text="Datenlogger", command=self.toggle_datalogger, font=self.my_font)
self.datalogger_button.grid(row=4, column=0, padx=(0, 10), pady=(10, 0), sticky="sew") self.datalogger_button.grid(row=6, column=2, padx=(0, 10), pady=(10, 0), sticky="sew")
# Plot # Plot
self.figure, self.ax = plt.subplots() self.figure, self.ax = plt.subplots()
self.canvas = FigureCanvasTkAgg(self.figure, self.root) self.canvas = FigureCanvasTkAgg(self.figure, self.root)
self.canvas.get_tk_widget().grid(row=0, column=3, rowspan=6, columnspan=4, padx=(10, 10), pady=(10, 0), sticky="nsew") self.canvas.get_tk_widget().grid(row=0, column=3, rowspan=8, columnspan=4, padx=(10, 10), pady=(10, 0), sticky="nsew")
self.ax.set_title("Drehmoment-Drehwinkel-Kennlinie") self.ax.set_title("Drehmoment-Drehwinkel-Kennlinie")
self.ax.set_xlabel("Winkel (°)") self.ax.set_xlabel("Winkel (°)")
@@ -167,22 +181,22 @@ class ArduinoGUI:
self.angle_label_var = customtkinter.StringVar() self.angle_label_var = customtkinter.StringVar()
self.angle_label_var.set("Drehwinkel: 0") self.angle_label_var.set("Drehwinkel: 0")
self.angle_label = customtkinter.CTkLabel(self.root, textvariable=self.angle_label_var, font=self.my_font) self.angle_label = customtkinter.CTkLabel(self.root, textvariable=self.angle_label_var, font=self.my_font)
self.angle_label.grid(row=6, column=3, padx=(10, 5), pady=(10, 0), sticky="sw") self.angle_label.grid(row=8, column=3, padx=(10, 5), pady=(10, 0), sticky="sw")
self.torque_label_var = customtkinter.StringVar() self.torque_label_var = customtkinter.StringVar()
self.torque_label_var.set("Istwert: 0") self.torque_label_var.set("Istwert: 0")
self.torque_label = customtkinter.CTkLabel(self.root, textvariable=self.torque_label_var, font=self.my_font) self.torque_label = customtkinter.CTkLabel(self.root, textvariable=self.torque_label_var, font=self.my_font)
self.torque_label.grid(row=6, column=4, padx=(10, 5), pady=(10, 0), sticky="sw") self.torque_label.grid(row=8, column=4, padx=(10, 5), pady=(10, 0), sticky="sw")
self.analogread_label_var = customtkinter.StringVar() self.analogread_label_var = customtkinter.StringVar()
self.analogread_label_var.set("Analogeingang: 0") self.analogread_label_var.set("Analogeingang: 0")
self.analogread_label = customtkinter.CTkLabel(self.root, textvariable=self.analogread_label_var, font=self.my_font) self.analogread_label = customtkinter.CTkLabel(self.root, textvariable=self.analogread_label_var, font=self.my_font)
self.analogread_label.grid(row=6, column=5, padx=(10, 5), pady=(10, 0), sticky="sw") self.analogread_label.grid(row=8, column=5, padx=(10, 5), pady=(10, 0), sticky="sw")
self.currentSetpoint_label_var = customtkinter.StringVar() self.currentSetpoint_label_var = customtkinter.StringVar()
self.currentSetpoint_label_var.set("Aktueller Sollwert: 0") self.currentSetpoint_label_var.set("Aktueller Sollwert: 0")
self.currentSetpoint_label = customtkinter.CTkLabel(self.root, textvariable=self.currentSetpoint_label_var, font=self.my_font) self.currentSetpoint_label = customtkinter.CTkLabel(self.root, textvariable=self.currentSetpoint_label_var, font=self.my_font)
self.currentSetpoint_label.grid(row=6, column=6, padx=(10, 5), pady=(10, 0), sticky="sw") self.currentSetpoint_label.grid(row=8, column=6, padx=(10, 5), pady=(10, 0), sticky="sw")
self.root.grid_columnconfigure(0, weight=0) self.root.grid_columnconfigure(0, weight=0)
self.root.grid_columnconfigure(1, weight=0) self.root.grid_columnconfigure(1, weight=0)
@@ -196,8 +210,11 @@ class ArduinoGUI:
self.root.grid_rowconfigure(2, weight=0) self.root.grid_rowconfigure(2, weight=0)
self.root.grid_rowconfigure(3, weight=0) self.root.grid_rowconfigure(3, weight=0)
self.root.grid_rowconfigure(4, weight=0) self.root.grid_rowconfigure(4, weight=0)
self.root.grid_rowconfigure(5, weight=1) self.root.grid_rowconfigure(5, weight=0)
self.root.grid_rowconfigure(6, weight=0) self.root.grid_rowconfigure(6, weight=0)
self.root.grid_rowconfigure(7, weight=1)
self.root.grid_rowconfigure(8, weight=0)
def set_pid_parameters(self): def set_pid_parameters(self):
if self.arduino: if self.arduino:
@@ -382,23 +399,28 @@ class ArduinoGUI:
if self.setpoint_flag: if self.setpoint_flag:
self.arduino.write(f"s{self.setpoint:.0f},0\n".encode()) self.arduino.write(f"s{self.setpoint:.0f},0\n".encode())
self.setpoint_flag = False self.setpoint_flag = False
time.sleep(0.1) while self.arduino.out_waiting:
pass
if self.multi_setpoints_flag: if self.multi_setpoints_flag:
self.send_interpolated_points() self.send_interpolated_points()
self.multi_setpoints_flag = False self.multi_setpoints_flag = False
time.sleep(0.1) while self.arduino.out_waiting:
pass
if self.tare_flag: if self.tare_flag:
self.arduino.write(b'w\n') self.arduino.write(b'w\n')
self.tare_flag = False self.tare_flag = False
time.sleep(0.1) while self.arduino.out_waiting:
pass
if self.demag_flag: if self.demag_flag:
self.arduino.write(b'e\n') self.arduino.write(b'e\n')
self.demag_flag = False self.demag_flag = False
time.sleep(0.1) while self.arduino.out_waiting:
pass
if self.input_source_flag: if self.input_source_flag:
self.arduino.write(b'S\n') self.arduino.write(b'S\n')
self.input_source_flag = False self.input_source_flag = False
time.sleep(0.1) while self.arduino.out_waiting:
pass
if self.pid_flag: if self.pid_flag:
self.send_pid_parameters() self.send_pid_parameters()
self.pid_flag = False self.pid_flag = False
@@ -440,27 +462,27 @@ class ArduinoGUI:
except Exception as e: except Exception as e:
print(e) print(e)
time.sleep(0.01)
if self.ser: if self.ser:
if self.ser.in_waiting: if self.ser.in_waiting:
try: try:
command = self.ser.read(1).decode(errors='ignore').strip() command = ""
print(command) while self.ser.in_waiting:
if command == 'a': command += self.ser.read(1).decode(errors='ignore').strip()
if command[0] == 'a':
message = f"{self.current_angle};{self.current_torque};{self.analogInput};{self.currentSetpoint};{self.currentOutput}\n" message = f"{self.current_angle};{self.current_torque};{self.analogInput};{self.currentSetpoint};{self.currentOutput}\n"
self.ser.write(message.encode()) self.ser.write(message.encode())
while self.ser.out_waiting: if command[0] == 'w':
pass
if command == 'w':
self.tare_angle() self.tare_angle()
if command == 'u': if command[0] == 'u':
time.sleep(5) outCommand = F"{command}\n"
string = self.ser.read_until(b"u")
outCommand = F"u{string}u\n"
self.arduino.write(outCommand.encode()) self.arduino.write(outCommand.encode())
print(self.arduino.readline())
time.sleep(0.1) time.sleep(0.1)
self.ser.read_all() self.ser.read()
except Exception as e: except Exception as e:
print(e) print(e)
#self.ser.write(b'Hallo\n') #self.ser.write(b'Hallo\n')
@@ -471,8 +493,6 @@ class ArduinoGUI:
except Exception as e: except Exception as e:
print(e) print(e)
time.sleep(0.1)
def send_pid_parameters(self): def send_pid_parameters(self):
if self.selected_pid in self.pid_params: if self.selected_pid in self.pid_params:
pid_values = self.pid_params[self.selected_pid] pid_values = self.pid_params[self.selected_pid]
@@ -489,13 +509,20 @@ class ArduinoGUI:
messagebox.showerror("Fehler", "Ausgewählte PID Konfiguration nicht gefunden.") messagebox.showerror("Fehler", "Ausgewählte PID Konfiguration nicht gefunden.")
def on_closing(self): def on_closing(self):
self.running = False userInput = simpledialog.askstring("Masterpasswort eingeben", "Zum Ausführen dieses Befehls ist das Masterpasswort notwendig.\n")
if self.arduino: if userInput == "976638":
self.arduino.close() self.running = False
if self.ser: if self.arduino:
self.ser.close() self.arduino.close()
self.root.quit() self.communication_thread = None
self.root.destroy() if self.ser:
self.ser.close()
self.root.quit()
self.root.destroy()
elif userInput == None:
pass
else:
messagebox.showerror("Fehler", "Es wurde ein falsches Passwort eingegeben.")
if __name__ == "__main__": if __name__ == "__main__":
root = customtkinter.CTk() root = customtkinter.CTk()

View File

@@ -1,4 +1,6 @@
tk==0.1.0
customtkinter==5.2.2
pyserial==3.5 pyserial==3.5
matplotlib==3.9.0 matplotlib==3.9.0
tk==0.1.0 numpy==2.0.1
customtkinter==5.2.2 Pillow==10.4.0