ich könnte mir vorstellen, das ich den Fensterinhalt, Frames usw beim aufrufen eines Menus löschen und mit neuen Inhalt bestücken kann.
Könnt ihr mich kurz einweihen wie ich das mache.
Springe ich dann beim Aufruf von Menu Hiperface in def window_hyperface(): oder muss ich mir eine Klasse bauen in der ich dann hin und her springe.
Meine begrenzten Kenntnisse
Aktuell öffne ich ein neues Fenster. Das würde mir aber nicht so gut gefallen.
Es kann aber auch durchaus so der bessere Weg sein.
Hier man erster Aufbau
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Apr 30 20:05:33 2026
@author: ralf
"""
#from tkinter import
#import tkinter as tk
from tkinter import ttk, Label, Button, Entry, Menu, LabelFrame, Text, Checkbutton, Radiobutton, messagebox
from ttkthemes import ThemedTk
import serial
import pyudev
usbport =""
context = pyudev.Context()
for device in context.list_devices(subsystem='tty', ID_VENDOR_ID='0403', ):
print(device.device_node)
if device.device_node != "":
# initialization and open the port
serial_interface = serial.Serial()
serial_interface.port =device.device_node
serial_interface.baudrate = 9600
serial_interface.bytesize = serial.EIGHTBITS
serial_interface.parity = serial.PARITY_EVEN
serial_interface.stopbits = serial.STOPBITS_ONE
serial_interface.timeout = 3
serial_interface.xonxoff = False
serial_interface.rtscts = False
serial_interface.dsrdtr = False
usbport= device.device_node
hintergrundcolor="#ffffff"
hintergrundcolornotebook="#ffffff"
def window_hyperface():
df_window = ThemedTk(theme="blue")
df_window.title("Hiperface")
df_window.geometry("800x800")
my_menu=Menu(df_window)
df_window.config(menu=my_menu)
df_window_menu= Menu(my_menu)
my_menu.add_cascade(label="Menu", menu=df_window_menu)
df_window_menu.add_command(label="Exit",command=df_window.destroy)
info_frame= LabelFrame(df_window, borderwidth=1, relief="sunken")
info_frame.grid(column=0, row=0, sticky="w",padx=2,pady=2, columnspan=4)
reset_frame= LabelFrame(df_window, borderwidth=1, relief="sunken")
reset_frame.grid(column=0, row=1, sticky="w",padx=2,pady=2, columnspan=4)
def main():
root = ThemedTk(theme="blue")
root.title("Servo-Box Version 1" + usbport )
root.config(bg=hintergrundcolor)
#root.config(bg="#FFFFFF" )
# rootgröße ermitteln
w, h = root.winfo_screenwidth(), root.winfo_screenheight()
root.geometry("%dx%d+0+0" % (w, h))
#root.geometry("1024x750")
#root. minsize(width=1200, height=950)
my_menu=Menu(root )
root.config(menu=my_menu)
file_menu= Menu(my_menu)
geber_menu = Menu(my_menu)
messung_menu = Menu(my_menu)
info_menu = Menu(my_menu)
my_menu.add_cascade(label="Menu", menu=file_menu)
file_menu.add_command(label="Exit",command=root.destroy)
if usbport == "":
messagebox.showerror('Beenden', 'Keine Schnittstelle, kein Gerät vorhanden. Bitte Anlage überprüfen und Programm neu starten.')
else:
my_menu.add_cascade(label="Geber", menu=geber_menu)
geber_menu.add_command(label="Hyperface", command=lambda: window_hyperface())
geber_menu.add_command(label="Hyperface DSL")
geber_menu.add_command(label="Resolver")
geber_menu.add_command(label="Endat analog")
geber_menu.add_command(label="Endat digital")
my_menu.add_cascade(label="Data", menu=messung_menu)
messung_menu.add_command(label="Analog")
messung_menu.add_command(label="RS485")
messung_menu.add_command(label="RS422")
my_menu.add_cascade(label="Info", menu=info_menu)
info_menu.add_command(label="Schnittstelle : " + usbport)
root.mainloop()
if __name__ == "__main__":
main()
