System Unit Problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
snafu
User
Beiträge: 6850
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Kleine Anmerkung: Bei mkdir() heißt das Argument nicht exit_ok, sondern exist_ok.
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

@punix: Vererbung ist dann sinnvoll, wenn die Basisklasse an sich eigenständig ist, oder als abstrakte Basisklasse für viele spezialisierte Klassen steht.
Die Klasse FileHandle ist nicht eigenständig, ruft sogar auf komische Weise eine Methode on_off der Kindklasse auf.
Bei Klassen benutzen globale Variablen. Aber gerade bei GUI-Programmen sind Klassen dafür da, Zustand zu speichern, so dass man gerade keine globalen Variablen braucht.
Beide Klassen sind unvollständig, wo wird l_box erstellt? Das würde ich in der __init__-Methode erwarten. Ebenso wg_autostart, oder selected_option.
autoconnect_var wird in on_off erstellt, aber schon davor benutzt. Also ein Programmfehler. Ebenso sollte das Label autoconnect auch schon in __init__ erzeugt werden, weil man nicht nachträglich Widgets in ein Fenster einfügen sollte. Dadurch ändert sich ja die größe des Fensters, was für den Nutzer überraschend ist.
Die Attribute select_tunnel, auto_con oder tl sind unnötig, weil die Information ja schon an anderer Stelle gespeichert ist. Ein Zeichen dafür ist, dass diese Attribute nur innerhalb einer Methode vorkommen und sonst nirgends benutzt werden.
`select_tunnel` scheint eine Liste zu sein, die bezeichnet man üblicherweise im Plural `select_tunnels`, dann ist `select_tunnel` auch frei und man muß nicht `select_tl` benutzen.
`ListTunnels` scheint eine Klasse zu sein, auf der eine Klassemethode aufgerufen wird. Ist das eine versteckte globale Variable oder sollte das eine einfache Funktion `get_tunnels` sein?

Warum wird in box_set die Datei geschrieben um sie sofort in onoff wieder zu laden? Den Inhalt kennst Du doch bereits.
autoconnect_var wird erst mit einem leeren String gesetzt, um sofort in der selben Funktion einen anderen Wert zu bekommen. Da ist das Setzen am Anfang überflüssig.
Wenn wg_autostart im einen Zweig auf disabled gesetzt wird, sollte es im anderen auf active gesetzt werden.

Das ganz könnte also so aussehen:

Code: Alles auswählen

class OnOff(tk.Tk):
    def __init__(self, path_to_file):
        super().__init__()
        self.path_to_file = path_to_file
        self.autoconnect_var = tk.StringVar(self)
        self.autoconnect = tk.Label(self, textvariable=self.autoconnect_var, fg='blue', padx=5, font=('Ubuntu', 11))
        self.autoconnect.grid(column=0, row=4, sticky='ne', pady=20)
        self.wg_autostart = tk.Checkbutton(self, ...)
        self.l_box = tk.Listbox(self, ...)
        self.selected_option = tk.IntVar(self)

    def box_set(self):
        select_tunnels = self.l_box.curselection()
        if len(select_tunnels) == 0:
            self.selected_option.set(1)
        else:
            if self.selected_option.get() == 0:
                select_tunnel = ""
            else:
                select_tunnel = self.l_box.get(select_tunnels[0])
                tunnels = get_tunnels()
                if not tunnels:
                    self.wg_autostart.configure(state=tk.DISABLED)
            self.path_to_file.write_text(select_tunnel)
        self.on_off()
    
    def on_off(self):
        select_tunnel = self.path_to_file.read_text().strip()
        if select_tunnel:
            self.selected_option.set(1)
            auto_con = select_tunnel
        else:
            self.wg_autostart.configure(state=tk.DISABLED)
            auto_con = 'no Autoconnect'
        self.autoconnect_var.set(auto_con)
Was jetzt noch komisch ist, ist, dass selected_option auf 1 gesetzt wird, wenn kein Tunnel ausgewählt ist, gleichzeitig aber 0 die Kennzeichnung ist, dass der selektierte Tunnel ignoriert werden soll.
Es wird wg_autostart auf DISABLED gesetzt, wenn es keine Tunnel gibt, oder wenn der Tunnel nicht gesetzt ist, aber wenn kein Tunnel existiert, wie kann man dann in den Zweig kommen?
punix
User
Beiträge: 18
Registriert: Montag 3. April 2023, 11:34

Sirius3 hat geschrieben: Donnerstag 12. September 2024, 08:05 @punix: Vererbung ist dann sinnvoll, wenn die Basisklasse an sich eigenständig ist, oder als abstrakte Basisklasse für viele spezialisierte Klassen steht.
Die Klasse FileHandle ist nicht eigenständig, ruft sogar auf komische Weise eine Methode on_off der Kindklasse auf.
Bei Klassen benutzen globale Variablen. Aber gerade bei GUI-Programmen sind Klassen dafür da, Zustand zu speichern, so dass man gerade keine globalen Variablen braucht.
Beide Klassen sind unvollständig, wo wird l_box erstellt? Das würde ich in der __init__-Methode erwarten. Ebenso wg_autostart, oder selected_option.
autoconnect_var wird in on_off erstellt, aber schon davor benutzt. Also ein Programmfehler. Ebenso sollte das Label autoconnect auch schon in __init__ erzeugt werden, weil man nicht nachträglich Widgets in ein Fenster einfügen sollte. Dadurch ändert sich ja die größe des Fensters, was für den Nutzer überraschend ist.
Die Attribute select_tunnel, auto_con oder tl sind unnötig, weil die Information ja schon an anderer Stelle gespeichert ist. Ein Zeichen dafür ist, dass diese Attribute nur innerhalb einer Methode vorkommen und sonst nirgends benutzt werden.
`select_tunnel` scheint eine Liste zu sein, die bezeichnet man üblicherweise im Plural `select_tunnels`, dann ist `select_tunnel` auch frei und man muß nicht `select_tl` benutzen.
`ListTunnels` scheint eine Klasse zu sein, auf der eine Klassemethode aufgerufen wird. Ist das eine versteckte globale Variable oder sollte das eine einfache Funktion `get_tunnels` sein?

Warum wird in box_set die Datei geschrieben um sie sofort in onoff wieder zu laden? Den Inhalt kennst Du doch bereits.
autoconnect_var wird erst mit einem leeren String gesetzt, um sofort in der selben Funktion einen anderen Wert zu bekommen. Da ist das Setzen am Anfang überflüssig.
Wenn wg_autostart im einen Zweig auf disabled gesetzt wird, sollte es im anderen auf active gesetzt werden.

Das ganz könnte also so aussehen:

Code: Alles auswählen

class OnOff(tk.Tk):
    def __init__(self, path_to_file):
        super().__init__()
        self.path_to_file = path_to_file
        self.autoconnect_var = tk.StringVar(self)
        self.autoconnect = tk.Label(self, textvariable=self.autoconnect_var, fg='blue', padx=5, font=('Ubuntu', 11))
        self.autoconnect.grid(column=0, row=4, sticky='ne', pady=20)
        self.wg_autostart = tk.Checkbutton(self, ...)
        self.l_box = tk.Listbox(self, ...)
        self.selected_option = tk.IntVar(self)

    def box_set(self):
        select_tunnels = self.l_box.curselection()
        if len(select_tunnels) == 0:
            self.selected_option.set(1)
        else:
            if self.selected_option.get() == 0:
                select_tunnel = ""
            else:
                select_tunnel = self.l_box.get(select_tunnels[0])
                tunnels = get_tunnels()
                if not tunnels:
                    self.wg_autostart.configure(state=tk.DISABLED)
            self.path_to_file.write_text(select_tunnel)
        self.on_off()
    
    def on_off(self):
        select_tunnel = self.path_to_file.read_text().strip()
        if select_tunnel:
            self.selected_option.set(1)
            auto_con = select_tunnel
        else:
            self.wg_autostart.configure(state=tk.DISABLED)
            auto_con = 'no Autoconnect'
        self.autoconnect_var.set(auto_con)
Was jetzt noch komisch ist, ist, dass selected_option auf 1 gesetzt wird, wenn kein Tunnel ausgewählt ist, gleichzeitig aber 0 die Kennzeichnung ist, dass der selektierte Tunnel ignoriert werden soll.
Es wird wg_autostart auf DISABLED gesetzt, wenn es keine Tunnel gibt, oder wenn der Tunnel nicht gesetzt ist, aber wenn kein Tunnel existiert, wie kann man dann in den Zweig kommen?
Damit der Hacken wieder gesetzt werden kann muss man erst in die listbox klicken um die checkbox zu Aktivieren.
Aktiviert wird sie nur wenn mindestens 1 Tunnel drin ist
Dein Code schau ich mir später an vielen dank schon mal.
punix
User
Beiträge: 18
Registriert: Montag 3. April 2023, 11:34

punix hat geschrieben: Donnerstag 12. September 2024, 08:20
Sirius3 hat geschrieben: Donnerstag 12. September 2024, 08:05 @punix: Vererbung ist dann sinnvoll, wenn die Basisklasse an sich eigenständig ist, oder als abstrakte Basisklasse für viele spezialisierte Klassen steht.
Die Klasse FileHandle ist nicht eigenständig, ruft sogar auf komische Weise eine Methode on_off der Kindklasse auf.
Bei Klassen benutzen globale Variablen. Aber gerade bei GUI-Programmen sind Klassen dafür da, Zustand zu speichern, so dass man gerade keine globalen Variablen braucht.
Beide Klassen sind unvollständig, wo wird l_box erstellt? Das würde ich in der __init__-Methode erwarten. Ebenso wg_autostart, oder selected_option.
autoconnect_var wird in on_off erstellt, aber schon davor benutzt. Also ein Programmfehler. Ebenso sollte das Label autoconnect auch schon in __init__ erzeugt werden, weil man nicht nachträglich Widgets in ein Fenster einfügen sollte. Dadurch ändert sich ja die größe des Fensters, was für den Nutzer überraschend ist.
Die Attribute select_tunnel, auto_con oder tl sind unnötig, weil die Information ja schon an anderer Stelle gespeichert ist. Ein Zeichen dafür ist, dass diese Attribute nur innerhalb einer Methode vorkommen und sonst nirgends benutzt werden.
`select_tunnel` scheint eine Liste zu sein, die bezeichnet man üblicherweise im Plural `select_tunnels`, dann ist `select_tunnel` auch frei und man muß nicht `select_tl` benutzen.
`ListTunnels` scheint eine Klasse zu sein, auf der eine Klassemethode aufgerufen wird. Ist das eine versteckte globale Variable oder sollte das eine einfache Funktion `get_tunnels` sein?

Warum wird in box_set die Datei geschrieben um sie sofort in onoff wieder zu laden? Den Inhalt kennst Du doch bereits.
autoconnect_var wird erst mit einem leeren String gesetzt, um sofort in der selben Funktion einen anderen Wert zu bekommen. Da ist das Setzen am Anfang überflüssig.
Wenn wg_autostart im einen Zweig auf disabled gesetzt wird, sollte es im anderen auf active gesetzt werden.

Das ganz könnte also so aussehen:

Code: Alles auswählen

class OnOff(tk.Tk):
    def __init__(self, path_to_file):
        super().__init__()
        self.path_to_file = path_to_file
        self.autoconnect_var = tk.StringVar(self)
        self.autoconnect = tk.Label(self, textvariable=self.autoconnect_var, fg='blue', padx=5, font=('Ubuntu', 11))
        self.autoconnect.grid(column=0, row=4, sticky='ne', pady=20)
        self.wg_autostart = tk.Checkbutton(self, ...)
        self.l_box = tk.Listbox(self, ...)
        self.selected_option = tk.IntVar(self)

    def box_set(self):
        select_tunnels = self.l_box.curselection()
        if len(select_tunnels) == 0:
            self.selected_option.set(1)
        else:
            if self.selected_option.get() == 0:
                select_tunnel = ""
            else:
                select_tunnel = self.l_box.get(select_tunnels[0])
                tunnels = get_tunnels()
                if not tunnels:
                    self.wg_autostart.configure(state=tk.DISABLED)
            self.path_to_file.write_text(select_tunnel)
        self.on_off()
    
    def on_off(self):
        select_tunnel = self.path_to_file.read_text().strip()
        if select_tunnel:
            self.selected_option.set(1)
            auto_con = select_tunnel
        else:
            self.wg_autostart.configure(state=tk.DISABLED)
            auto_con = 'no Autoconnect'
        self.autoconnect_var.set(auto_con)
Was jetzt noch komisch ist, ist, dass selected_option auf 1 gesetzt wird, wenn kein Tunnel ausgewählt ist, gleichzeitig aber 0 die Kennzeichnung ist, dass der selektierte Tunnel ignoriert werden soll.
Es wird wg_autostart auf DISABLED gesetzt, wenn es keine Tunnel gibt, oder wenn der Tunnel nicht gesetzt ist, aber wenn kein Tunnel existiert, wie kann man dann in den Zweig kommen?
Damit der Hacken wieder gesetzt werden kann muss man erst in die listbox klicken um die checkbox zu Aktivieren.
Aktiviert wird sie nur wenn mindestens 1 Tunnel drin ist
Dein Code schau ich mir später an vielen dank schon mal.
Jetzt nochmal gelesen...
Um in den Zweig zu kommen muss ein Tunnel importiert werden. Das funktioniert auch alles soweit. mit dem Export bin ich noch nicht fertig und Tunnel umbenennen kommt noch mit rein.
da die .tunnel.conf für nmcli max 12Zeichen haben darf, wird bei meinem import bei zuvielen Zeiche automatisch umbennant. Das es für den Nutzer meiner meinung nach einfacher ist wenn des ding startet.
Und bei bedarf kann dann einfach auch über die Gui jeder Tunnel umbenannt werden.
So sieht die Gui aus.
https://fb.ilunix.de/api/public/dl/e-pGzXld?inline=true
Nur denk ich mal das dies in ein anderes Themenfeld gehört oder,?
nicht das noch einer schimpft...
Zuletzt geändert von punix am Donnerstag 12. September 2024, 11:37, insgesamt 1-mal geändert.
Benutzeravatar
sparrow
User
Beiträge: 4528
Registriert: Freitag 17. April 2009, 10:28

Fällt dir nicht auf, dass deine Posts gar nicht zu lesen sind? Ist das ein Trollversuch, weil dir gesagt wurde, es ist unnötig, die vorherigen Posts voll zu zitieren?
punix
User
Beiträge: 18
Registriert: Montag 3. April 2023, 11:34

sparrow hat geschrieben: Donnerstag 12. September 2024, 11:36 Fällt dir nicht auf, dass deine Posts gar nicht zu lesen sind? Ist das ein Trollversuch, weil dir gesagt wurde, es ist unnötig, die vorherigen Posts voll zu zitieren?
Entschuldige bitte. Hab ich was verkehrt gemacht?
punix
User
Beiträge: 18
Registriert: Montag 3. April 2023, 11:34

@sparrow
Sorry jetzt hab ich es gesehn. Bin ein blindgänger.................
Da werd ich natürlich in Zukunft darauf achten.
Antworten