Seite 1 von 1

Touch Keyboard Rätsel

Verfasst: Donnerstag 17. Dezember 2020, 20:21
von TGOR
Hallo mein Name ist TGOR und ich habe ein Problem.

Denn ich habe meinen Pi an einen Touchsrenn angeschlossen das klappt auch alles soweit nun möchte ich denn via TKInter eine Tastatur programmieren damit man über Touch eingaben tätigen kann nun habe ich folgendes Problem, denn meine Tastatur ist 1. sehr sehr lang weil ich jede einzelne Taste einzeln erstelle bzw setzte und außerdem schreibt die Tastatur nur in die Textbox/Entry "name_field"

aber ich möchte auch noch in andere Entrys schreiben können das heißt ich muss es so Programmieren das ein Tastatur Anschlag simuliert wird.

nur kommt folgendes Problem dazu ich programmiere an meinem Win10 Rechner und packe das script dann auf denn pi, wenn ich also Module wie pynput verwende muss ich das auch jedesmal auf jeden pi mit installieren deswegen hätte ich gerne eine Lösung wo ich keine zusätlichen module/script mit installieren muss gibt es da eine Lösung?

Code: Alles auswählen

name_field=Entry(keyboard,width="30",font=("AcmeFont",15))

##########  Keyboard  ############
    keya = Button(keyboard,text="a",command=lambda:name_field.insert(END,"a"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyb = Button(keyboard,text="b",command=lambda:name_field.insert(END,"b"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyc = Button(keyboard,text="c",command=lambda:name_field.insert(END,"c"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyd = Button(keyboard,text="d",command=lambda:name_field.insert(END,"d"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keye = Button(keyboard,text="f",command=lambda:name_field.insert(END,"e"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyf = Button(keyboard,text="f",command=lambda:name_field.insert(END,"f"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyg = Button(keyboard,text="g",command=lambda:name_field.insert(END,"g"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyh = Button(keyboard,text="h",command=lambda:name_field.insert(END,"h"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyi = Button(keyboard,text="i",command=lambda:name_field.insert(END,"i"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyj = Button(keyboard,text="j",command=lambda:name_field.insert(END,"j"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyk = Button(keyboard,text="k",command=lambda:name_field.insert(END,"k"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyl = Button(keyboard,text="l",command=lambda:name_field.insert(END,"l"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keym = Button(keyboard,text="m",command=lambda:name_field.insert(END,"m"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyn = Button(keyboard,text="n",command=lambda:name_field.insert(END,"n"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyo = Button(keyboard,text="o",command=lambda:name_field.insert(END,"o"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyp = Button(keyboard,text="p",command=lambda:name_field.insert(END,"p"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyq = Button(keyboard,text="q",command=lambda:name_field.insert(END,"q"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyr = Button(keyboard,text="r",command=lambda:name_field.insert(END,"r"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keys = Button(keyboard,text="s",command=lambda:name_field.insert(END,"s"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyt = Button(keyboard,text="t",command=lambda:name_field.insert(END,"t"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyu = Button(keyboard,text="u",command=lambda:name_field.insert(END,"u"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyv = Button(keyboard,text="v",command=lambda:name_field.insert(END,"v"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyw = Button(keyboard,text="w",command=lambda:name_field.insert(END,"w"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyx = Button(keyboard,text="x",command=lambda:name_field.insert(END,"x"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyy = Button(keyboard,text="y",command=lambda:name_field.insert(END,"y"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyz = Button(keyboard,text="z",command=lambda:name_field.insert(END,"z"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyue = Button(keyboard,text="ü",command=lambda:name_field.insert(END,"ü"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyoe = Button(keyboard,text="ö",command=lambda:name_field.insert(END,"ö"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyae = Button(keyboard,text="ä",command=lambda:name_field.insert(END,"ä"),width="3",height="1",bg="grey",font=("AcmeFont",15))
    keyspace = Button(keyboard,text="Space",command=lambda:name_field.insert(END," "),width="9",height="1",bg="grey",font=("AcmeFont",15))
    keyback = Button(keyboard,text="<--  ",command=lambda:name_field.delete(1.0,END),width="6",height="1",bg="grey",font=("AcmeFont",15))

    name_field.place(x=50,y=150)
    keya.place(x=40,y=680)
    keyb.place(x=230,y=730)
    keyc.place(x=130,y=730)
    keyd.place(x=140,y=680)
    keye.place(x=130,y=630)
    keyf.place(x=190,y=680)
    keyg.place(x=240,y=680)
    keyh.place(x=290,y=680)
    keyi.place(x=380,y=630)
    keyj.place(x=340,y=680)
    keyk.place(x=390,y=680)
    keyl.place(x=440,y=680)
    keym.place(x=330,y=730)
    keyn.place(x=280,y=730)
    keyo.place(x=430,y=630)
    keyp.place(x=480,y=630)
    keyq.place(x=30,y=630)
    keyr.place(x=180,y=630)
    keys.place(x=90,y=680)
    keyt.place(x=230,y=630)
    keyu.place(x=330,y=630)
    keyv.place(x=180,y=730)
    keyw.place(x=80,y=630)
    keyx.place(x=80,y=730)
    keyy.place(x=30,y=730)
    keyz.place(x=280,y=630)
    keyue.place(x=530,y=630)
    keyoe.place(x=490,y=680)
    keyae.place(x=540,y=680)
    keyspace.place(x=380,y=730)
    keyback.place(x=503,y=730)
    

Re: Touch Keyboard Rätsel

Verfasst: Freitag 18. Dezember 2020, 08:27
von Sirius3
Der viele Code läßt sich durch eine einfache Schleife ersetzen:

Code: Alles auswählen

from functools import partial
KEYS = [
    ("a", 40, 680),
    ("b", 230, 730),
    ("c", 130, 730),
    ("d", 140, 680),
    ("e", 130, 630),
    ("f", 190, 680),
    ("g", 240, 680),
    ("h", 290, 680),
    ("i", 380, 630),
    ("j", 340, 680),
    ("k", 390, 680),
    ("l", 440, 680),
    ("m", 330, 730),
    ("n", 280, 730),
    ("o", 430, 630),
    ("p", 480, 630),
    ("q", 30, 630),
    ("r", 180, 630),
    ("s", 90, 680),
    ("t", 230, 630),
    ("u", 330, 630),
    ("v", 180, 730),
    ("w", 80, 630),
    ("x", 80, 730),
    ("y", 30, 730),
    ("z", 280, 630),
    ("ä", 530, 630),
    ("ö", 490, 680),
    ("ü", 540, 680),
]

name_field = Entry(keyboard, width="30", font=("AcmeFont",15))
name_field.place(x=50,y=150)
for letter, x, y in KEYS:
    key = Button(keyboard, text=letter, command=partial(name_field.insert, END, letter), width="3", height="1", bg="grey", font=("AcmeFont",15))
    key.place(x=x, y=y)
keyspace = Button(keyboard,text="Space",command=partial(name_field.insert, END, " "), width="9", height="1", bg="grey", font=("AcmeFont",15))
keyspace.place(x=380,y=730)
keyback = Button(keyboard,text="<--  ",command=partial(name_field.delete, 1.0, END), width="6", height="1", bg="grey", font=("AcmeFont",15))
keyback.place(x=503,y=730)
Wenn Du in andere Entries schreiben willst, mußt Du das Entry, in das geschrieben wird, variabel machen. Also das FocusIn-Event abfragen und entsprechend auch wieder zurücksetzen.
Der Code läßt befürchten, dass Du am Anfang `from tkinter import *` stehen hast. *-Importe macht man nicht, weil man damit unkontrolliert hunderte Namen in den eigenen Namensraum schaufelt. Üblicherweise wird `import tkinter as tk` benutzt und alle Namen per tk.xy angesprochen.

Re: Touch Keyboard Rätsel

Verfasst: Freitag 18. Dezember 2020, 09:23
von Sirius3
Das ganze mal umgesetzt:

Code: Alles auswählen

import tkinter as tk
from functools import partial

KEYS= [
    ('a', 40, 60),
    ('b', 230, 110),
    ('c', 130, 110),
    ('d', 140, 60),
    ('e', 130, 10),
    ('f', 190, 60),
    ('g', 240, 60),
    ('h', 290, 60),
    ('i', 380, 10),
    ('j', 340, 60),
    ('k', 390, 60),
    ('l', 440, 60),
    ('m', 330, 110),
    ('n', 280, 110),
    ('o', 430, 10),
    ('p', 480, 10),
    ('q', 30, 10),
    ('r', 180, 10),
    ('s', 90, 60),
    ('t', 230, 10),
    ('u', 330, 10),
    ('v', 180, 110),
    ('w', 80, 10),
    ('x', 80, 110),
    ('y', 30, 110),
    ('z', 280, 10),
    ('ä', 530, 10),
    ('ö', 490, 60),
    ('ü', 540, 60)
]

class Keyboard(tk.Frame):
    def __init__(self, root):
        tk.Frame.__init__(self, root, width=600, height=160)
        self.focused_widget = None
        for letter, x, y in KEYS:
            key = tk.Button(self, text=letter, command=partial(self.type, letter), width="3", height="1", bg="grey", font=("AcmeFont",15))
            key.place(x=x, y=y)
        keyspace = tk.Button(self,text="Space", command=partial(self.type, " "), width="9", height="1", bg="grey", font=("AcmeFont",15))
        keyspace.place(x=380, y=110)
        keyback = tk.Button(self,text="<--  ", command=self.backspace, width="6", height="1", bg="grey", font=("AcmeFont",15))
        keyback.place(x=503, y=110)

    def type(self, letter):
        if self.focused_widget:
            self.focused_widget.insert(tk.END, letter)

    def backspace(self):
        if self.focused_widget:
            self.focused_widget.delete(1, tk.END)
        
    def set_focus(self, event):
        self.focused_widget = event.widget

    def release_focus(self, event):
        self.focused_widget = None

def main():
    root = tk.Tk()
    name_field = tk.Entry(root, width="30", font=("AcmeFont",15))
    name_field.pack()
    name_field = tk.Entry(root, width="30", font=("AcmeFont",15))
    name_field.pack()
    keyboard = Keyboard(root)
    keyboard.pack()
    root.bind("<FocusIn>", keyboard.set_focus)
    root.bind("<FocusOut>", keyboard.release_focus)
    root.mainloop()

if __name__ == '__main__':
    main()

Re: Touch Keyboard Rätsel

Verfasst: Sonntag 20. Dezember 2020, 13:21
von TGOR
Danke @ Sirius3 die Tastatur funktioniert super jetzt muss ich sie nur noch verstehen wie du sicherlich gemerkt hast bin ich gerade am Anfang meiner Programmierergeschichte, weshalb ich erst mal verstehen können möchte was genau du da gemacht hast :D weil ich es ja lernen muss/möchte.

Re: Touch Keyboard Rätsel

Verfasst: Sonntag 20. Dezember 2020, 14:00
von TGOR
so ich habe jetzt mal versucht deine Tastatur in mein Programm zu intigrieren genauso wie ich probiert habe das "from TKInter import *" in eine "import tkinter as tk"
zu ändern.
.... jetzt geht gar nichts mehr das Problem ist durch YouTube Videos lernt man echt nicht gut und wenn dann nur diese eine gezeigte Nische.
könnt ihr bitte bitte mal drüber schauen wo mein Fehler ist und mir bitte erklären warum und wie dieser Fehler ist. und ja ich weiss ich habe noch viel was an dem code verbesserd werden muss zb alle entry und alle... alles andere.

Ja ich weiß ich habe versucht eine code von einem Profi in einem Code von einem Noob (mir) zu intigrieren, aber das muss ich ja auch erst alles verstehen und lernen :D
Danke MFG TGOR

Code: Alles auswählen

import tkinter as tk
from tkinter import ttk
from functools import partial
#from gpiozero import LED
from time import *
import tester


#############################################
############### useradd Fenster #############
def useradd_funk():
    keyboard=Toplevel(root)
    keyboard.title("useradd_keyboard")
    keyboard.geometry("600x800")
    KEYS= [
        ('a', 40, 60),
        ('b', 230, 110),
        ('c', 130, 110),
        ('d', 140, 60),
        ('e', 130, 10),
        ('f', 190, 60),
        ('g', 240, 60),
        ('h', 290, 60),
        ('i', 380, 10),
        ('j', 340, 60),
        ('k', 390, 60),
        ('l', 440, 60),
        ('m', 330, 110),
        ('n', 280, 110),
        ('o', 430, 10),
        ('p', 480, 10),
        ('q', 30, 10),
        ('r', 180, 10),
        ('s', 90, 60),
        ('t', 230, 10),
        ('u', 330, 10),
        ('v', 180, 110),
        ('w', 80, 10),
        ('x', 80, 110),
        ('y', 30, 110),
        ('z', 280, 10),
        ('ä', 530, 10),
        ('ö', 490, 60),
        ('ü', 540, 60)
    ]
    class Keyboard(tk.useradd_funk):
        def __init__(self, root):
            tk.useradd_funk.__init__(self, root, width=600, height=160)
            self.focused_widget = None
            for letter, x, y in KEYS:
                key = tk.Button(self, text=letter, command=partial(self.type, letter), width="3", height="1", bg="grey", font=("AcmeFont",15))
                key.place(x=x, y=y)
            keyspace = tk.Button(self,text="Space", command=partial(self.type, " "), width="9", height="1", bg="grey", font=("AcmeFont",15))
            keyspace.place(x=380, y=110)
            keyback = tk.Button(self,text="<--  ", command=self.backspace, width="6", height="1", bg="grey", font=("AcmeFont",15))
            keyback.place(x=503, y=110)

        def type(self, letter):
            if self.focused_widget:
                self.focused_widget.insert(tk.END, letter)

        def backspace(self):
            if self.focused_widget:
                self.focused_widget.delete(1, tk.END)

        def set_focus(self, event):
            self.focused_widget = event.widget

        def release_focus(self, event):
            self.focused_widget = None

    def main():
        root = tk.Tk()
        name_field = tk.Entry(root, width="30", font=("AcmeFont",15))
        name_field.pack()
        name_field = tk.Entry(root, width="30", font=("AcmeFont",15))
        name_field.pack()
        keyboard = Keyboard(root)
        keyboard.pack()
        root.bind("<FocusIn>", keyboard.set_focus)
        root.bind("<FocusOut>", keyboard.release_focus)
        root.mainloop()

    if __name__ == '__main__':
        main()
    def checkbox_check():
        if Checkbox_checkt.get():
            infinity_open_check["text"]="Unbegrenzter Zugang"
            montag_h_min.config(state="disable")
            montag_m_min.config(state="disable")
            montag_h_max.config(state="disable")
            montag_m_max.config(state="disable")
            dienstag_h_min.config(state="disable")
            dienstag_m_min.config(state="disable")
            dienstag_h_max.config(state="disable")
            dienstag_m_max.config(state="disable")
            mittwoch_h_min.config(state="disable")
            mittwoch_m_min.config(state="disable")
            mittwoch_h_max.config(state="disable")
            mittwoch_m_max.config(state="disable")
            donnerstag_h_min.config(state="disable")
            donnerstag_m_min.config(state="disable")
            donnerstag_h_max.config(state="disable")
            donnerstag_m_max.config(state="disable")
            freitag_h_min.config(state="disable")
            freitag_m_min.config(state="disable")
            freitag_h_max.config(state="disable")
            freitag_m_max.config(state="disable")
            samstag_h_min.config(state="disable")
            samstag_m_min.config(state="disable")
            samstag_h_max.config(state="disable")
            samstag_m_max.config(state="disable")
            sonntag_h_min.config(state="disable")
            sonntag_m_min.config(state="disable")
            sonntag_h_max.config(state="disable")
            sonntag_m_max.config(state="disable")
            montag_menu.config(state="disable")
            dienstag_menu.config(state="disable")
            mittwoch_menu.config(state="disable")
            donnerstag_menu.config(state="disable")
            freitag_menu.config(state="disable")
            samstag_menu.config(state="disable")
            sonntag_menu.config(state="disable")
            label_montag.config(state="disable")
            label_dienstag.config(state="disable")
            label_mittwoch.config(state="disable")
            label_donnerstag.config(state="disable")
            label_freitag.config(state="disable")
            label_samstag.config(state="disable")
            label_sonntag.config(state="disable")
            label_string_1.config(state="disable")
            label_string_2.config(state="disable")
            label_string_3.config(state="disable")
            label_string_4.config(state="disable")
            label_string_5.config(state="disable")
            label_string_6.config(state="disable")
            label_string_7.config(state="disable")
        else:
            infinity_open_check["text"]="Begrenzter Zugang"
            montag_h_min.config(state="normal")
            montag_m_min.config(state="normal")
            montag_h_max.config(state="normal")
            montag_m_max.config(state="normal")
            dienstag_h_min.config(state="normal")
            dienstag_m_min.config(state="normal")
            dienstag_h_max.config(state="normal")
            dienstag_m_max.config(state="normal")
            mittwoch_h_min.config(state="normal")
            mittwoch_m_min.config(state="normal")
            mittwoch_h_max.config(state="normal")
            mittwoch_m_max.config(state="normal")
            donnerstag_h_min.config(state="normal")
            donnerstag_m_min.config(state="normal")
            donnerstag_h_max.config(state="normal")
            donnerstag_m_max.config(state="normal")
            freitag_h_min.config(state="normal")
            freitag_m_min.config(state="normal")
            freitag_h_max.config(state="normal")
            freitag_m_max.config(state="normal")
            samstag_h_min.config(state="normal")
            samstag_m_min.config(state="normal")
            samstag_h_max.config(state="normal")
            samstag_m_max.config(state="normal")
            sonntag_h_min.config(state="normal")
            sonntag_m_min.config(state="normal")
            sonntag_h_max.config(state="normal")
            sonntag_m_max.config(state="normal")
            montag_menu.config(state="normal")
            dienstag_menu.config(state="normal")
            mittwoch_menu.config(state="normal")
            donnerstag_menu.config(state="normal")
            freitag_menu.config(state="normal")
            samstag_menu.config(state="normal")
            sonntag_menu.config(state="normal")
            label_montag.config(state="normal")
            label_dienstag.config(state="normal")
            label_mittwoch.config(state="normal")
            label_donnerstag.config(state="normal")
            label_freitag.config(state="normal")
            label_samstag.config(state="normal")
            label_sonntag.config(state="normal")
            label_string_1.config(state="normal")
            label_string_2.config(state="normal")
            label_string_3.config(state="normal")
            label_string_4.config(state="normal")
            label_string_5.config(state="normal")
            label_string_6.config(state="normal")
            label_string_7.config(state="normal")

            return
    Checkbox_checkt=IntVar()

    day_options = ["keinzugang","Unbegrenzt","benutzerdefiniert"]

    monvar= StringVar()
    monvar.set("keinzugang")
    dievar= StringVar()
    dievar.set("keinzugang")
    mitvar= StringVar()
    mitvar.set("keinzugang")
    donvar= StringVar()
    donvar.set("keinzugang")
    frevar= StringVar()
    frevar.set("keinzugang")
    samvar= StringVar()
    samvar.set("keinzugang")
    sonvar= StringVar()
    sonvar.set("keinzugang")

    montag_h_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    montag_m_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    montag_h_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    montag_m_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    dienstag_h_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    dienstag_m_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    dienstag_h_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    dienstag_m_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    mittwoch_h_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    mittwoch_m_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    mittwoch_h_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    mittwoch_m_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    donnerstag_h_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    donnerstag_m_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    donnerstag_h_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    donnerstag_m_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    freitag_h_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    freitag_m_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    freitag_h_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    freitag_m_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    samstag_h_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    samstag_m_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    samstag_h_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    samstag_m_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    sonntag_h_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    sonntag_m_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    sonntag_h_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    sonntag_m_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")

    montag_menu=tk.OptionMenu(keyboard, monvar, *day_options)
    dienstag_menu=tk.OptionMenu(keyboard, dievar, *day_options)
    mittwoch_menu=tk.OptionMenu(keyboard, mitvar, *day_options)
    donnerstag_menu=tk.OptionMenu(keyboard, donvar, *day_options)
    freitag_menu=tk.OptionMenu(keyboard, frevar, *day_options)
    samstag_menu=tk.OptionMenu(keyboard, samvar, *day_options)
    sonntag_menu=tk.OptionMenu(keyboard, sonvar, *day_options)

    label_montag=tk.tk.Label(keyboard,text="Montag",font=("AcmeFont",15),state="normal")
    label_dienstag=tk.tk.Label(keyboard,text="Dienstag",font=("AcmeFont",15),state="normal")
    label_mittwoch=tk.tk.Label(keyboard,text="Mittwoch",font=("AcmeFont",15),state="normal")
    label_donnerstag=tk.tk.Label(keyboard,text="Donnerstag",font=("AcmeFont",15),state="normal")
    label_freitag=tk.tk.Label(keyboard,text="Freitag",font=("AcmeFont",15),state="normal")
    label_samstag=tk.tk.Label(keyboard,text="Samstag",font=("AcmeFont",15),state="normal")
    label_sonntag=tk.tk.Label(keyboard,text="Sonntag",font=("AcmeFont",15),state="normal")


    label_string_1=tk.Label(keyboard,text="-",font=("AcmeFont",20),state="normal")
    label_string_2=tk.Label(keyboard,text="-",font=("AcmeFont",20),state="normal")
    label_string_3=tk.Label(keyboard,text="-",font=("AcmeFont",20),state="normal")
    label_string_4=tk.Label(keyboard,text="-",font=("AcmeFont",20),state="normal")
    label_string_5=tk.Label(keyboard,text="-",font=("AcmeFont",20),state="normal")
    label_string_6=tk.Label(keyboard,text="-",font=("AcmeFont",20),state="normal")
    label_string_7=tk.Label(keyboard,text="-",font=("AcmeFont",20),state="normal")

    infinity_open_check=tk.Checkbutton(keyboard,text="Begrenzter Zugang",variable=Checkbox_checkt,command=checkbox_check)
    name_field=tk.Entry(keyboard,width="30",font=("AcmeFont",15))

##########  Keyboard  ############

    label_string_1.place(x=390,y=290)
    label_string_2.place(x=390,y=330)
    label_string_3.place(x=390,y=370)
    label_string_4.place(x=390,y=410)
    label_string_5.place(x=390,y=450)
    label_string_6.place(x=390,y=490)
    label_string_7.place(x=390,y=530)
    montag_h_min.place(x=300,y=290)
    montag_m_min.place(x=340,y=290)
    montag_h_max.place(x=420,y=290)
    montag_m_max.place(x=460,y=290)
    dienstag_h_min.place(x=300,y=330)
    dienstag_m_min.place(x=340,y=330)
    dienstag_h_max.place(x=420,y=330)
    dienstag_m_max.place(x=460,y=330)
    mittwoch_h_min.place(x=300,y=370)
    mittwoch_m_min.place(x=340,y=370)
    mittwoch_h_max.place(x=420,y=370)
    mittwoch_m_max.place(x=460,y=370)
    donnerstag_h_min.place(x=300,y=410)
    donnerstag_m_min.place(x=340,y=410)
    donnerstag_h_max.place(x=420,y=410)
    donnerstag_m_max.place(x=460,y=410)
    freitag_h_min.place(x=300,y=450)
    freitag_m_min.place(x=340,y=450)
    freitag_h_max.place(x=420,y=450)
    freitag_m_max.place(x=460,y=450)
    samstag_h_min.place(x=300,y=490)
    samstag_m_min.place(x=340,y=490)
    samstag_h_max.place(x=420,y=490)
    samstag_m_max.place(x=460,y=490)
    sonntag_h_min.place(x=300,y=530)
    sonntag_m_min.place(x=340,y=530)
    sonntag_h_max.place(x=420,y=530)
    sonntag_m_max.place(x=460,y=530)
    montag_menu.place(x=170,y=290)
    dienstag_menu.place(x=170,y=330)
    mittwoch_menu.place(x=170,y=370)
    donnerstag_menu.place(x=170,y=410)
    freitag_menu.place(x=170,y=450)
    samstag_menu.place(x=170,y=490)
    sonntag_menu.place(x=170,y=530)
    label_montag.place(x=30,y=290)
    label_dienstag.place(x=30,y=330)
    label_mittwoch.place(x=30,y=370)
    label_donnerstag.place(x=30,y=410)
    label_freitag.place(x=30,y=450)
    label_samstag.place(x=30,y=490)
    label_sonntag.place(x=30,y=530)
    infinity_open_check.place(x=300,y=100)
    name_field.place(x=50,y=150)


#############################################
############### user Fenster #############330

#########  Notizen  ###########
#ttk.Treeview ausprobieren

def user():
    userlist=Toplevel(root) #Neues Fenster öffnen
    userlist.title("Smartdoor")
    userlist.geometry("600x800")
    userlist.attributes('-fullscreen',False) #Vollbild
    #Benutzer buttons und Funktionen
    useradd = tk.Button(userlist,text="+",command=useradd_funk,width="3",height="1",bg="grey",font=("AcmeFont",50))
    useradd.place(x=15,y=15)
#############################################
########## Settings Fenster #################
def settings():
    settings=Toplevel(root) #Neues Fenster öffnen
    settings.title("Smartdoor")
    settings.geometry("600x800")
    settings.attributes('-fullscreen',False) #Vollbild
#Funktionen Settings
    def back():
        settings.destroy()

    def themes():
        print("test")

#Buttons Settings
    userbut = tk.Button(settings,text="Benutzer",command=user,height = 1,width = 20,bd=8,relief="raised",font="Times 32")
    themesbut = tk.Button(settings,text="Themes",command=themes,height = 1,width = 20,bd=8,relief="raised",font="Times 32")
    backbut = tk.Button(settings,text="zurück",command=back,height = 1,width = 20,bd=8,relief="raised",font="Times 32")



    userbut.pack()
    themesbut.pack()
    backbut.pack()

#######################################
############ root Fenster #############
root = Tk()
root.title("Smartdoor")
root.geometry("600x800")
root.attributes('-fullscreen',False) #Vollbild

#Funktionen root
def spycam():
    print("ich sehe dich")

def lock():
    if lockbut["text"] == "Abschließen":
        lockbut["text"] = "Aufschließen"
    else:
        lockbut["text"] = "Abschließen"

def beenden():
    root.destroy()

#Buttons root
settingsbutton=tk.Button(root,text="Einstellungen",command=settings,height = 1,width = 20,bd=8,relief="raised",font="Times 32")
settingsbutton.pack()

lockbut=tk.Button(root,text="Abschließen",command=lambda:[lock()],height = 1,width = 20,bd=8,relief="raised",font="Times 32")
lockbut.pack()

spybut=tk.Button(root,text="Türspion",command=spycam,height = 1,width = 20,bd=8,relief="raised",font="Times 32")
spybut.pack()

beenden=tk.Button(root,text="Schließen",command=beenden,height = 1,width = 20,bd=8,relief="raised",font="Times 32")
beenden.pack()

mainloop()

Re: Touch Keyboard Rätsel

Verfasst: Sonntag 20. Dezember 2020, 14:02
von TGOR
so ich habe jetzt mal versucht deine Tastatur in mein Programm zu intigrieren genauso wie ich probiert habe das "from TKInter import *" in eine "import tkinter as tk"
zu ändern.
.... jetzt geht gar nichts mehr das Problem ist durch YouTube Videos lernt man echt nicht gut und wenn dann nur diese eine gezeigte Nische.
könnt ihr bitte bitte mal drüber schauen wo mein Fehler ist und mir bitte erklären warum und wie dieser Fehler ist. und ja ich weiss ich habe noch viel was an dem code verbesserd werden muss zb alle entry und alle... alles andere.

Ja ich weiß ich habe versucht eine code von einem Profi in einem Code von einem Noob (mir) zu intigrieren, aber das muss ich ja auch erst alles verstehen und lernen :D
Danke MFG TGOR

Code: Alles auswählen

import tkinter as tk
from tkinter import ttk
from functools import partial
#from gpiozero import LED
from time import *
import tester


#############################################
############### useradd Fenster #############
def useradd_funk():
    keyboard=Toplevel(root)
    keyboard.title("useradd_keyboard")
    keyboard.geometry("600x800")
    KEYS= [
        ('a', 40, 60),
        ('b', 230, 110),
        ('c', 130, 110),
        ('d', 140, 60),
        ('e', 130, 10),
        ('f', 190, 60),
        ('g', 240, 60),
        ('h', 290, 60),
        ('i', 380, 10),
        ('j', 340, 60),
        ('k', 390, 60),
        ('l', 440, 60),
        ('m', 330, 110),
        ('n', 280, 110),
        ('o', 430, 10),
        ('p', 480, 10),
        ('q', 30, 10),
        ('r', 180, 10),
        ('s', 90, 60),
        ('t', 230, 10),
        ('u', 330, 10),
        ('v', 180, 110),
        ('w', 80, 10),
        ('x', 80, 110),
        ('y', 30, 110),
        ('z', 280, 10),
        ('ä', 530, 10),
        ('ö', 490, 60),
        ('ü', 540, 60)
    ]
    class Keyboard(tk.useradd_funk):
        def __init__(self, root):
            tk.useradd_funk.__init__(self, root, width=600, height=160)
            self.focused_widget = None
            for letter, x, y in KEYS:
                key = tk.Button(self, text=letter, command=partial(self.type, letter), width="3", height="1", bg="grey", font=("AcmeFont",15))
                key.place(x=x, y=y)
            keyspace = tk.Button(self,text="Space", command=partial(self.type, " "), width="9", height="1", bg="grey", font=("AcmeFont",15))
            keyspace.place(x=380, y=110)
            keyback = tk.Button(self,text="<--  ", command=self.backspace, width="6", height="1", bg="grey", font=("AcmeFont",15))
            keyback.place(x=503, y=110)

        def type(self, letter):
            if self.focused_widget:
                self.focused_widget.insert(tk.END, letter)

        def backspace(self):
            if self.focused_widget:
                self.focused_widget.delete(1, tk.END)

        def set_focus(self, event):
            self.focused_widget = event.widget

        def release_focus(self, event):
            self.focused_widget = None

    def main():
        root = tk.Tk()
        name_field = tk.Entry(root, width="30", font=("AcmeFont",15))
        name_field.pack()
        name_field = tk.Entry(root, width="30", font=("AcmeFont",15))
        name_field.pack()
        keyboard = Keyboard(root)
        keyboard.pack()
        root.bind("<FocusIn>", keyboard.set_focus)
        root.bind("<FocusOut>", keyboard.release_focus)
        root.mainloop()

    if __name__ == '__main__':
        main()
    def checkbox_check():
        if Checkbox_checkt.get():
            infinity_open_check["text"]="Unbegrenzter Zugang"
            montag_h_min.config(state="disable")
            montag_m_min.config(state="disable")
            montag_h_max.config(state="disable")
            montag_m_max.config(state="disable")
            dienstag_h_min.config(state="disable")
            dienstag_m_min.config(state="disable")
            dienstag_h_max.config(state="disable")
            dienstag_m_max.config(state="disable")
            mittwoch_h_min.config(state="disable")
            mittwoch_m_min.config(state="disable")
            mittwoch_h_max.config(state="disable")
            mittwoch_m_max.config(state="disable")
            donnerstag_h_min.config(state="disable")
            donnerstag_m_min.config(state="disable")
            donnerstag_h_max.config(state="disable")
            donnerstag_m_max.config(state="disable")
            freitag_h_min.config(state="disable")
            freitag_m_min.config(state="disable")
            freitag_h_max.config(state="disable")
            freitag_m_max.config(state="disable")
            samstag_h_min.config(state="disable")
            samstag_m_min.config(state="disable")
            samstag_h_max.config(state="disable")
            samstag_m_max.config(state="disable")
            sonntag_h_min.config(state="disable")
            sonntag_m_min.config(state="disable")
            sonntag_h_max.config(state="disable")
            sonntag_m_max.config(state="disable")
            montag_menu.config(state="disable")
            dienstag_menu.config(state="disable")
            mittwoch_menu.config(state="disable")
            donnerstag_menu.config(state="disable")
            freitag_menu.config(state="disable")
            samstag_menu.config(state="disable")
            sonntag_menu.config(state="disable")
            label_montag.config(state="disable")
            label_dienstag.config(state="disable")
            label_mittwoch.config(state="disable")
            label_donnerstag.config(state="disable")
            label_freitag.config(state="disable")
            label_samstag.config(state="disable")
            label_sonntag.config(state="disable")
            label_string_1.config(state="disable")
            label_string_2.config(state="disable")
            label_string_3.config(state="disable")
            label_string_4.config(state="disable")
            label_string_5.config(state="disable")
            label_string_6.config(state="disable")
            label_string_7.config(state="disable")
        else:
            infinity_open_check["text"]="Begrenzter Zugang"
            montag_h_min.config(state="normal")
            montag_m_min.config(state="normal")
            montag_h_max.config(state="normal")
            montag_m_max.config(state="normal")
            dienstag_h_min.config(state="normal")
            dienstag_m_min.config(state="normal")
            dienstag_h_max.config(state="normal")
            dienstag_m_max.config(state="normal")
            mittwoch_h_min.config(state="normal")
            mittwoch_m_min.config(state="normal")
            mittwoch_h_max.config(state="normal")
            mittwoch_m_max.config(state="normal")
            donnerstag_h_min.config(state="normal")
            donnerstag_m_min.config(state="normal")
            donnerstag_h_max.config(state="normal")
            donnerstag_m_max.config(state="normal")
            freitag_h_min.config(state="normal")
            freitag_m_min.config(state="normal")
            freitag_h_max.config(state="normal")
            freitag_m_max.config(state="normal")
            samstag_h_min.config(state="normal")
            samstag_m_min.config(state="normal")
            samstag_h_max.config(state="normal")
            samstag_m_max.config(state="normal")
            sonntag_h_min.config(state="normal")
            sonntag_m_min.config(state="normal")
            sonntag_h_max.config(state="normal")
            sonntag_m_max.config(state="normal")
            montag_menu.config(state="normal")
            dienstag_menu.config(state="normal")
            mittwoch_menu.config(state="normal")
            donnerstag_menu.config(state="normal")
            freitag_menu.config(state="normal")
            samstag_menu.config(state="normal")
            sonntag_menu.config(state="normal")
            label_montag.config(state="normal")
            label_dienstag.config(state="normal")
            label_mittwoch.config(state="normal")
            label_donnerstag.config(state="normal")
            label_freitag.config(state="normal")
            label_samstag.config(state="normal")
            label_sonntag.config(state="normal")
            label_string_1.config(state="normal")
            label_string_2.config(state="normal")
            label_string_3.config(state="normal")
            label_string_4.config(state="normal")
            label_string_5.config(state="normal")
            label_string_6.config(state="normal")
            label_string_7.config(state="normal")

            return
    Checkbox_checkt=IntVar()

    day_options = ["keinzugang","Unbegrenzt","benutzerdefiniert"]

    monvar= StringVar()
    monvar.set("keinzugang")
    dievar= StringVar()
    dievar.set("keinzugang")
    mitvar= StringVar()
    mitvar.set("keinzugang")
    donvar= StringVar()
    donvar.set("keinzugang")
    frevar= StringVar()
    frevar.set("keinzugang")
    samvar= StringVar()
    samvar.set("keinzugang")
    sonvar= StringVar()
    sonvar.set("keinzugang")

    montag_h_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    montag_m_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    montag_h_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    montag_m_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    dienstag_h_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    dienstag_m_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    dienstag_h_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    dienstag_m_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    mittwoch_h_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    mittwoch_m_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    mittwoch_h_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    mittwoch_m_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    donnerstag_h_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    donnerstag_m_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    donnerstag_h_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    donnerstag_m_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    freitag_h_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    freitag_m_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    freitag_h_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    freitag_m_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    samstag_h_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    samstag_m_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    samstag_h_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    samstag_m_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    sonntag_h_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    sonntag_m_min=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    sonntag_h_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")
    sonntag_m_max=tk.Entry(keyboard,width="2",font=("AcmeFont",20),state="normal")

    montag_menu=tk.OptionMenu(keyboard, monvar, *day_options)
    dienstag_menu=tk.OptionMenu(keyboard, dievar, *day_options)
    mittwoch_menu=tk.OptionMenu(keyboard, mitvar, *day_options)
    donnerstag_menu=tk.OptionMenu(keyboard, donvar, *day_options)
    freitag_menu=tk.OptionMenu(keyboard, frevar, *day_options)
    samstag_menu=tk.OptionMenu(keyboard, samvar, *day_options)
    sonntag_menu=tk.OptionMenu(keyboard, sonvar, *day_options)

    label_montag=tk.tk.Label(keyboard,text="Montag",font=("AcmeFont",15),state="normal")
    label_dienstag=tk.tk.Label(keyboard,text="Dienstag",font=("AcmeFont",15),state="normal")
    label_mittwoch=tk.tk.Label(keyboard,text="Mittwoch",font=("AcmeFont",15),state="normal")
    label_donnerstag=tk.tk.Label(keyboard,text="Donnerstag",font=("AcmeFont",15),state="normal")
    label_freitag=tk.tk.Label(keyboard,text="Freitag",font=("AcmeFont",15),state="normal")
    label_samstag=tk.tk.Label(keyboard,text="Samstag",font=("AcmeFont",15),state="normal")
    label_sonntag=tk.tk.Label(keyboard,text="Sonntag",font=("AcmeFont",15),state="normal")


    label_string_1=tk.Label(keyboard,text="-",font=("AcmeFont",20),state="normal")
    label_string_2=tk.Label(keyboard,text="-",font=("AcmeFont",20),state="normal")
    label_string_3=tk.Label(keyboard,text="-",font=("AcmeFont",20),state="normal")
    label_string_4=tk.Label(keyboard,text="-",font=("AcmeFont",20),state="normal")
    label_string_5=tk.Label(keyboard,text="-",font=("AcmeFont",20),state="normal")
    label_string_6=tk.Label(keyboard,text="-",font=("AcmeFont",20),state="normal")
    label_string_7=tk.Label(keyboard,text="-",font=("AcmeFont",20),state="normal")

    infinity_open_check=tk.Checkbutton(keyboard,text="Begrenzter Zugang",variable=Checkbox_checkt,command=checkbox_check)
    name_field=tk.Entry(keyboard,width="30",font=("AcmeFont",15))

##########  Keyboard  ############

    label_string_1.place(x=390,y=290)
    label_string_2.place(x=390,y=330)
    label_string_3.place(x=390,y=370)
    label_string_4.place(x=390,y=410)
    label_string_5.place(x=390,y=450)
    label_string_6.place(x=390,y=490)
    label_string_7.place(x=390,y=530)
    montag_h_min.place(x=300,y=290)
    montag_m_min.place(x=340,y=290)
    montag_h_max.place(x=420,y=290)
    montag_m_max.place(x=460,y=290)
    dienstag_h_min.place(x=300,y=330)
    dienstag_m_min.place(x=340,y=330)
    dienstag_h_max.place(x=420,y=330)
    dienstag_m_max.place(x=460,y=330)
    mittwoch_h_min.place(x=300,y=370)
    mittwoch_m_min.place(x=340,y=370)
    mittwoch_h_max.place(x=420,y=370)
    mittwoch_m_max.place(x=460,y=370)
    donnerstag_h_min.place(x=300,y=410)
    donnerstag_m_min.place(x=340,y=410)
    donnerstag_h_max.place(x=420,y=410)
    donnerstag_m_max.place(x=460,y=410)
    freitag_h_min.place(x=300,y=450)
    freitag_m_min.place(x=340,y=450)
    freitag_h_max.place(x=420,y=450)
    freitag_m_max.place(x=460,y=450)
    samstag_h_min.place(x=300,y=490)
    samstag_m_min.place(x=340,y=490)
    samstag_h_max.place(x=420,y=490)
    samstag_m_max.place(x=460,y=490)
    sonntag_h_min.place(x=300,y=530)
    sonntag_m_min.place(x=340,y=530)
    sonntag_h_max.place(x=420,y=530)
    sonntag_m_max.place(x=460,y=530)
    montag_menu.place(x=170,y=290)
    dienstag_menu.place(x=170,y=330)
    mittwoch_menu.place(x=170,y=370)
    donnerstag_menu.place(x=170,y=410)
    freitag_menu.place(x=170,y=450)
    samstag_menu.place(x=170,y=490)
    sonntag_menu.place(x=170,y=530)
    label_montag.place(x=30,y=290)
    label_dienstag.place(x=30,y=330)
    label_mittwoch.place(x=30,y=370)
    label_donnerstag.place(x=30,y=410)
    label_freitag.place(x=30,y=450)
    label_samstag.place(x=30,y=490)
    label_sonntag.place(x=30,y=530)
    infinity_open_check.place(x=300,y=100)
    name_field.place(x=50,y=150)


#############################################
############### user Fenster #############330

#########  Notizen  ###########
#ttk.Treeview ausprobieren

def user():
    userlist=Toplevel(root) #Neues Fenster öffnen
    userlist.title("Smartdoor")
    userlist.geometry("600x800")
    userlist.attributes('-fullscreen',False) #Vollbild
    #Benutzer buttons und Funktionen
    useradd = tk.Button(userlist,text="+",command=useradd_funk,width="3",height="1",bg="grey",font=("AcmeFont",50))
    useradd.place(x=15,y=15)
#############################################
########## Settings Fenster #################
def settings():
    settings=Toplevel(root) #Neues Fenster öffnen
    settings.title("Smartdoor")
    settings.geometry("600x800")
    settings.attributes('-fullscreen',False) #Vollbild
#Funktionen Settings
    def back():
        settings.destroy()

    def themes():
        print("test")

#Buttons Settings
    userbut = tk.Button(settings,text="Benutzer",command=user,height = 1,width = 20,bd=8,relief="raised",font="Times 32")
    themesbut = tk.Button(settings,text="Themes",command=themes,height = 1,width = 20,bd=8,relief="raised",font="Times 32")
    backbut = tk.Button(settings,text="zurück",command=back,height = 1,width = 20,bd=8,relief="raised",font="Times 32")



    userbut.pack()
    themesbut.pack()
    backbut.pack()

#######################################
############ root Fenster #############
root = Tk()
root.title("Smartdoor")
root.geometry("600x800")
root.attributes('-fullscreen',False) #Vollbild

#Funktionen root
def spycam():
    print("ich sehe dich")

def lock():
    if lockbut["text"] == "Abschließen":
        lockbut["text"] = "Aufschließen"
    else:
        lockbut["text"] = "Abschließen"

def beenden():
    root.destroy()

#Buttons root
settingsbutton=tk.Button(root,text="Einstellungen",command=settings,height = 1,width = 20,bd=8,relief="raised",font="Times 32")
settingsbutton.pack()

lockbut=tk.Button(root,text="Abschließen",command=lambda:[lock()],height = 1,width = 20,bd=8,relief="raised",font="Times 32")
lockbut.pack()

spybut=tk.Button(root,text="Türspion",command=spycam,height = 1,width = 20,bd=8,relief="raised",font="Times 32")
spybut.pack()

beenden=tk.Button(root,text="Schließen",command=beenden,height = 1,width = 20,bd=8,relief="raised",font="Times 32")
beenden.pack()

mainloop()

Re: Touch Keyboard Rätsel

Verfasst: Sonntag 20. Dezember 2020, 14:49
von Sirius3
Jetzt hast Du noch einen *-Import von time? Das ist doch genauso unschön. Zudem Du gar nichts daraus benutzt.
Du hast fast 400 Zeilen Code zusammenkopiert. Da ist es kein Wunder, dass es nicht funktioniert.
Ein Programm entwickelt man Stück für Stück und testet das jeweils und baut nur funktionierende Teile zu etwas komplexerem zusammen.
Funktionen schachtelt man nicht in andere Funktionen, erst recht keine Klassen.
Wie kommst Du auf die Idee, dass ein tk.useradd_funk existiert? Ein Frame dient dazu, ein Fenster zu strukturieren. Womit wir zum nächsten Punkt kommen. GUIs baut man nicht mit place auf, weil das auf jedem System anders aussieht und zu unbenutzbaren GUIs führt.
Jeder Tag hat viele Elemente, die zusammengehören, das ist also ideal für eine Klasse geeignet.
Für jede nur etwas komplexere GUI muß man Klassendefinitionen gut verstanden haben.