Beispiel, in einer readonly combobox gibt es aus Auswahl 'vor', 'zurück', 'stop' als Möglichkeiten, die stehen da je nachdem was ausgewählt ist auch im Eingabefeld. Die Eingaben sollen später in eine Datei geschrieben werden, welch dann ausgewertet wird. Für die spätere Auswertung, kann ich aber mit Text/String wenig anfangen, da in der Datei nur je Eingabefeld (über 160) nur ein Byte steht.
D.h. also in dem Byte das vor, zurück, stop hat steht z.B. für stop 0x00, für vor z.B. 0x02, für zurück. Das wäre ja noch über den Index zu lösen. An anderer Stelle gibt es z.B. links, mitte, rechts, bzw. leer und leer = 0x0, links = 0x01, mitte = 0x02, rechts = 0x04
so soll z.B.
Label text='Richtung'
Eingabefeld byte_56 bei Auswahl vor nicht 'vor' sondern 0x01 enthalten, angezeigt werden soll aber vor.
Dann könnte wenn alles ausgefüllt ist in einer Schleife die Werte von byte_0 bis byte_166 auslesen und in die Datei abspeichern.
Die Datei und alles dahinter steht schon, da will und kann ich nicht mehr ändern, ist ein größeres SmartHome Projekt im Produktiveinsatz.
Aktuell sieht die Datei z.B. so aus 0x05,0x22,0x2f, ....., beim Hochladen wird das dann ausgewertet und der jeweilige Binärwert in den EProm geschrieben.
Natürlich könnte ich die Strings der einzelnen Eingabewert auch beim auslesen entsprechend ihres Inhalts umwandeln, aber das gibt eine Abfrageorgie. Elegant wäre es eben den internen hex Wert gleich der Combobox mitzugeben.
Momentan sieht das so aus, Formatierung passt noch nicht.
Code: Alles auswählen
# Formular zum Erstellen und Ändern der CAN Knoten Konfiguration
# created 06.09.2024 by Rainer Müller-Knoche
import tkinter as tk
# nächste Zeile ?
from tkinter.ttk import Label
from email.policy import default
from tkinter import messagebox, ttk
# großer Font
LARGE = 18
# byte 0,1
ADDRESS_FIELDS = 'node_ID', 'group_ID'
# byte 2-4
CONFIG_FIELDS = 'type', 'port_1', 'port_2'
# 5-10 click, 11-16 double click, 17-22 long click, 23-28 while click n/a
FUNCTION_FIELDS = 'click_Type', 'target_ID', 'target_GID', 'target_Port', 'target_Action', 'source_GID'
# 29-55 Taster 2, 56-82 Taster 3, 83-109 Taster 4
TYPE_TYPES = '1 Push n_o', '2 rev. Push n_c', '4 Switch n_o', '8 uSwitch', '16 tSwitch', '32 ptSwitch'
PORT_VALUES = '1 inPort 1', '2 inPort 2' # ob das schon passt
ACTIVE_TYPES = 'inactiv', 'activ'
def type_and_port():
# loop mit Liste
value_select(TYPE_TYPES, 'Typ',0) # Taster ist default
value_select(PORT_VALUES, 'Port 1',1)
value_select(PORT_VALUES, 'Port 2',0)
def value_select(select_list,label_text,default_select):
label = ttk.Label(text=label_text, width=10, anchor=tk.W).pack(side=tk.LEFT)
label_text = tk.Entry
combo = ttk.Combobox(
state="readonly",
values=select_list
)
combo.set(select_list[default_select])
combo.pack()
# entries.append((label, label_text))
def makeform(root, fields):
entries = []
row = tk.Frame(root)
row.pack(fill=tk.X, padx=5, pady=5)
for field in fields:
tk.Label(row, width=10, text=field, anchor=tk.W).pack(side=tk.LEFT)
entry = tk.Entry(row, width=10)
entry.pack(side=tk.LEFT, expand=tk.YES, fill=tk.X)
entries.append((field, entry))
def printLabel(root, hinweis, attrib_color='white', attrib_size=12 ):
Hinweis = tk.Label(root, text=hinweis, anchor='w', fg=attrib_color, font=("Arial",attrib_size))
Hinweis.pack()
def main():
root = tk.Tk()
root.title('CAN_Config')
# Text + Felder Adressen
printLabel(root, 'Byte 0,1 Node ID und Group ID eingeben', attrib_color='yellow')
makeform(root, ADDRESS_FIELDS)
# Start Taster 1
printLabel(root,'Taster 1', "red", attrib_size=LARGE)
printLabel(root,'Byte 2-4 Typ, Port 1, opt Port 2')
type_and_port() #
# makeform(root, CONFIG_FIELDS)
# printLabel(root,'Byte 5-10 Funktion Click')
# makeform(root, FUNCTION_FIELDS)
# printLabel(root,'Byte 11-16 Funktion doppel click')
# makeform(root, FUNCTION_FIELDS)
# printLabel(root,'Byte 17-22 Funktion langer Click')
# makeform(root, FUNCTION_FIELDS)
# printLabel(root,'Byte 23-28 reserverd while Click')
# makeform(root, FUNCTION_FIELDS)
root.mainloop()
if __name__ == '__main__':
main()