Listbox to Listbox, Scrollbar
Verfasst: Samstag 11. Mai 2019, 19:52
Hallo, ihr lieben. Hab mich ein wenig in Python 3.6.4 (Win10) eingearbeitet und möchte jetzt ein keines Lernprogramm schreiben. Das Programm soll später in Bereiche - Themen - Kapitel gegliedert werden. Als Anfänger nähere ich mich in kleinen Schritten dem Ziel und hab mit Hilfe von tkinter ein Tool zum erstellen der "Bereich" ( einfache Ordnerstruktur) und der Themen gebastelt. Jetzt möchte ich das ganze auch für die Kapitel haben.
Die Probleme -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Mit der Listbox für die "Themen" möchte ich auf die "Listbox" für die Bereiche zugreifen.
Hier brauche ich dringend einen Lösungsansatz. Super wehre Tutorials zu dem Thema.
Und ich schaffe es nicht die Scrollbar in das Textfeld für den "Kapitel Text" (richtig) einzubinden.
Es liegt an der Umwandlung von .pack zu .grid aber was genau ich falsch mach, verstehe ich nicht.
Am Ende soll eine ".txt"-Datei erzeugt werde. (Das sollte ich aber selber hinkriegen.)
Code ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#--------------------------------------------------------------------------------------------
#- neues Kapitel = nk.py ----------------------------------------------------------------------
#--------------------------------------------------------------------------------------------
import os
from tkinter import *
LB = [] # Liste Bereiche ---------------------------------------------------------------------
# Haupt - Pfad = HPf --------------------------------------------------------------------------
HPf = os.environ['HOME'] + "/AppData/Local/Programs/Python/Python36/MeineÜbungen/Quiz/bereiche/"
l_T = os.listdir(HPf) #+ Themen auswahl # Liste der Themen = l_T --------------------------------------
# Die folgende Funktion soll ausgeführt werden,
# wenn der Benutzer den Button Klick me anklickt
def button_action():
e_t = e_nk.get() # Eingabe Text des neuen Kapitel
a_B = efBereich.get("active") # Ausgewählter Bereich
a_T = efThema.get("active") # Ausgewählter Thema
# Meldung bei Eingabefehlern = a_f
if (e_t == ""):
a_f.config(text="Name des neuen Kapitels eingeben.")
else:
if e_t in l_K:
a_f.config(text="Kapitel existiert bereits.")
else:
# Kapitel Pfad = TPf
KPf = (HPf + a_B + "/" + a_T + "/" + e_t)
os.mkdir(KPf)
# with open(".txt", "w") as nkd:
# nkd.write("Test!\n")
a_f.config(text="Kapitel wurde angelegt.")
print(KPf)
#-----------------------------------------------------------------------------------
# --------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------
fenster = Tk()
fenster.title("neues Kapitel erstellen.")
# Schriftart / Grösse -------------------------------------------------------------------------
# Standart Schriftart / Grösse
ssa = "Arial 12"
# Überschriften Schriftart / Grösse
üsa = "Arial 16"
# Frame Namen ------------------------------------------------------------------------------
frame0 = Frame(fenster) # Bereich auswählen
frame1 = Frame(fenster) # neues Thema
frame2 = Frame(fenster) # neues Kapitel
frame3 = Frame(fenster) # Kapitel Text
frame4 = Frame(fenster) # Buttons
# Beschrieftung der Eingabefelder -----------------------------------------------------
Bereich = Label(frame0, text="Bereich auswählen:", font = ssa)
Thema = Label(frame1, text="Thema auswählen:", font = ssa)
# Beschrieftung neues Kapitel = nk ------------------------------------------
nk = Label(frame2, text="Name für das neue Kapitel: ")
KapitelText = Label(frame3, text="Kapitel Text eingeben:", font = ssa)
# Ausgabe Feld ----------------------------------------------------------------------
a_f = Label(frame4)
# Eingabefeld neues Thema = e_nk
e_nk = Entry(frame2, bd=5, width=20) #width = Breite des Eingabefeldes
# Eingabefeld Kapitel Text = e_kt
e_kt = Text(frame3, bd=5, height=10, width=50) #, height=10) #width = Breite des Eingabefeldes
# Auswahl Bereich ---------------------------------------------------------------------
efBereich = Listbox(frame0,height=3)
l_B = os.listdir(HPf) # Liste der Bereiche = l_B --------------------------------------
for l_Bu in (l_B): # Liste untereinander auflisten.
efBereich.insert("end", l_Bu)
print("Bereich:", l_B)
# Auswahl Thema -------------------------------------------------------------------
efThema= Listbox(frame1,height=3)
a_B = efBereich.get("active") # Ausgewählter Bereich
l_T = os.listdir(HPf + "/" + a_B) # Liste der Thema = l_T --------------------------------------
for l_Tu in (l_T): # Liste untereinander auflisten.
efThema.insert("end", l_Tu)
print("Thema:", l_T)
# Auswahl Kapitel -------------------------------------------------------------------
a_T = efThema.get("active") # Ausgewählter Bereich
l_K = os.listdir(HPf + "/" + a_B + "/" + a_T) # Liste der Kapitel = l_K --------------------------------------
for l_Ku in (l_K): # Liste untereinander auflisten.
e_nk.insert("end", l_Ku)
print("Kapitel:", l_K)
# Scrollbar Bereich ------------------------------------------------------
sBereich = Scrollbar(frame0, orient=VERTICAL)
efBereich["yscrollcommand"]=sBereich.set
sBereich["command"]=efBereich.yview
# Scrollbar Thema ------------------------------------------------------
sThema = Scrollbar(frame1, orient=VERTICAL)
efThema["yscrollcommand"]=sThema.set
sThema["command"]=efThema.yview
# Kapitel Text = kt -----------------------------------------------------------------
sb_kt = Scrollbar(frame3, orient=VERTICAL) # Scrollbar Kapitel Text = sb_kt
e_kt["yscrollcommand"]=sb_kt.set
sb_kt["command"]=e_kt.yview
#sb_kt.pack(side=RIGHT, fill=Y)
#e_kt.pack(side=LEFT, fill=Y)
# Button Thema erstellen = b_te ----------------------------------------------
b_te_button = Button(frame4, text="Erstellen", command=button_action)
b_exit_button = Button(frame4, text="Abbrechen", command=fenster.destroy)
#----------------------------------------------------------------------------------
#- Positionen ---------------------------------------------------------------------
#----------------------------------------------------------------------------------
# Bereich -------------------------------------------------------------------------
frame0.grid(row = 0, column = 0)
Bereich.grid(row = 0, column = 0, sticky = (E))
efBereich.grid(row = 0, column = 1, sticky = (W)) # Auswahl Bereich
sBereich.grid(row = 0, column = 2, sticky = (E)) # Scrollbar
# Thema -------------------------------------------------------------
frame1.grid(row = 1, column = 0)
Thema.grid(row = 0, column = 0, sticky = (E))
efThema.grid(row = 0, column = 1, sticky = (W)) # Auswahl Thema
sThema.grid(row = 0, column = 2, sticky = (E)) # Scrollbar
# Kapitel ------------------------------------------------------------
frame2.grid(row = 2, column = 0)
nk.grid(row = 0, column = 0) # Beschrieftung neues Kapitel
e_nk.grid(row = 0, column = 1) # Eingabefeld neues Kapitel
# Kapitel Text -----------------------------------------------------------
frame3.grid(row = 3, column = 0, columnspan = 2)
KapitelText.grid(row = 0 , column = 0) # Kapitel Text
e_kt.grid(row = 1, column = 0, rowspan= 3) # Eingabefeld Kapitel Text
#e_kt.grid(side=LEFT, fill=Y) # Eingabefeld Kapitel Text
#sb_kt.grid(row = 2, column = 0) # Eingabefeld Kapitel Text
#sb_kt.grid(side=RIGHT, fill=Y) # Eingabefeld Kapitel Text
# Buttons -----------------------------------------------------------------
frame4.grid(row = 4, column = 1)
a_f.grid(row = 1, column = 0, columnspan = 2)# Ausgabe Feld
b_te_button.grid(row = 0, column = 0)# Button Thema erstellen
b_exit_button.grid(row = 0, column = 1)
# Programmende ###############################################################################################
mainloop()
Die Probleme -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Mit der Listbox für die "Themen" möchte ich auf die "Listbox" für die Bereiche zugreifen.
Hier brauche ich dringend einen Lösungsansatz. Super wehre Tutorials zu dem Thema.
Und ich schaffe es nicht die Scrollbar in das Textfeld für den "Kapitel Text" (richtig) einzubinden.
Es liegt an der Umwandlung von .pack zu .grid aber was genau ich falsch mach, verstehe ich nicht.
Am Ende soll eine ".txt"-Datei erzeugt werde. (Das sollte ich aber selber hinkriegen.)
Code ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#--------------------------------------------------------------------------------------------
#- neues Kapitel = nk.py ----------------------------------------------------------------------
#--------------------------------------------------------------------------------------------
import os
from tkinter import *
LB = [] # Liste Bereiche ---------------------------------------------------------------------
# Haupt - Pfad = HPf --------------------------------------------------------------------------
HPf = os.environ['HOME'] + "/AppData/Local/Programs/Python/Python36/MeineÜbungen/Quiz/bereiche/"
l_T = os.listdir(HPf) #+ Themen auswahl # Liste der Themen = l_T --------------------------------------
# Die folgende Funktion soll ausgeführt werden,
# wenn der Benutzer den Button Klick me anklickt
def button_action():
e_t = e_nk.get() # Eingabe Text des neuen Kapitel
a_B = efBereich.get("active") # Ausgewählter Bereich
a_T = efThema.get("active") # Ausgewählter Thema
# Meldung bei Eingabefehlern = a_f
if (e_t == ""):
a_f.config(text="Name des neuen Kapitels eingeben.")
else:
if e_t in l_K:
a_f.config(text="Kapitel existiert bereits.")
else:
# Kapitel Pfad = TPf
KPf = (HPf + a_B + "/" + a_T + "/" + e_t)
os.mkdir(KPf)
# with open(".txt", "w") as nkd:
# nkd.write("Test!\n")
a_f.config(text="Kapitel wurde angelegt.")
print(KPf)
#-----------------------------------------------------------------------------------
# --------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------
fenster = Tk()
fenster.title("neues Kapitel erstellen.")
# Schriftart / Grösse -------------------------------------------------------------------------
# Standart Schriftart / Grösse
ssa = "Arial 12"
# Überschriften Schriftart / Grösse
üsa = "Arial 16"
# Frame Namen ------------------------------------------------------------------------------
frame0 = Frame(fenster) # Bereich auswählen
frame1 = Frame(fenster) # neues Thema
frame2 = Frame(fenster) # neues Kapitel
frame3 = Frame(fenster) # Kapitel Text
frame4 = Frame(fenster) # Buttons
# Beschrieftung der Eingabefelder -----------------------------------------------------
Bereich = Label(frame0, text="Bereich auswählen:", font = ssa)
Thema = Label(frame1, text="Thema auswählen:", font = ssa)
# Beschrieftung neues Kapitel = nk ------------------------------------------
nk = Label(frame2, text="Name für das neue Kapitel: ")
KapitelText = Label(frame3, text="Kapitel Text eingeben:", font = ssa)
# Ausgabe Feld ----------------------------------------------------------------------
a_f = Label(frame4)
# Eingabefeld neues Thema = e_nk
e_nk = Entry(frame2, bd=5, width=20) #width = Breite des Eingabefeldes
# Eingabefeld Kapitel Text = e_kt
e_kt = Text(frame3, bd=5, height=10, width=50) #, height=10) #width = Breite des Eingabefeldes
# Auswahl Bereich ---------------------------------------------------------------------
efBereich = Listbox(frame0,height=3)
l_B = os.listdir(HPf) # Liste der Bereiche = l_B --------------------------------------
for l_Bu in (l_B): # Liste untereinander auflisten.
efBereich.insert("end", l_Bu)
print("Bereich:", l_B)
# Auswahl Thema -------------------------------------------------------------------
efThema= Listbox(frame1,height=3)
a_B = efBereich.get("active") # Ausgewählter Bereich
l_T = os.listdir(HPf + "/" + a_B) # Liste der Thema = l_T --------------------------------------
for l_Tu in (l_T): # Liste untereinander auflisten.
efThema.insert("end", l_Tu)
print("Thema:", l_T)
# Auswahl Kapitel -------------------------------------------------------------------
a_T = efThema.get("active") # Ausgewählter Bereich
l_K = os.listdir(HPf + "/" + a_B + "/" + a_T) # Liste der Kapitel = l_K --------------------------------------
for l_Ku in (l_K): # Liste untereinander auflisten.
e_nk.insert("end", l_Ku)
print("Kapitel:", l_K)
# Scrollbar Bereich ------------------------------------------------------
sBereich = Scrollbar(frame0, orient=VERTICAL)
efBereich["yscrollcommand"]=sBereich.set
sBereich["command"]=efBereich.yview
# Scrollbar Thema ------------------------------------------------------
sThema = Scrollbar(frame1, orient=VERTICAL)
efThema["yscrollcommand"]=sThema.set
sThema["command"]=efThema.yview
# Kapitel Text = kt -----------------------------------------------------------------
sb_kt = Scrollbar(frame3, orient=VERTICAL) # Scrollbar Kapitel Text = sb_kt
e_kt["yscrollcommand"]=sb_kt.set
sb_kt["command"]=e_kt.yview
#sb_kt.pack(side=RIGHT, fill=Y)
#e_kt.pack(side=LEFT, fill=Y)
# Button Thema erstellen = b_te ----------------------------------------------
b_te_button = Button(frame4, text="Erstellen", command=button_action)
b_exit_button = Button(frame4, text="Abbrechen", command=fenster.destroy)
#----------------------------------------------------------------------------------
#- Positionen ---------------------------------------------------------------------
#----------------------------------------------------------------------------------
# Bereich -------------------------------------------------------------------------
frame0.grid(row = 0, column = 0)
Bereich.grid(row = 0, column = 0, sticky = (E))
efBereich.grid(row = 0, column = 1, sticky = (W)) # Auswahl Bereich
sBereich.grid(row = 0, column = 2, sticky = (E)) # Scrollbar
# Thema -------------------------------------------------------------
frame1.grid(row = 1, column = 0)
Thema.grid(row = 0, column = 0, sticky = (E))
efThema.grid(row = 0, column = 1, sticky = (W)) # Auswahl Thema
sThema.grid(row = 0, column = 2, sticky = (E)) # Scrollbar
# Kapitel ------------------------------------------------------------
frame2.grid(row = 2, column = 0)
nk.grid(row = 0, column = 0) # Beschrieftung neues Kapitel
e_nk.grid(row = 0, column = 1) # Eingabefeld neues Kapitel
# Kapitel Text -----------------------------------------------------------
frame3.grid(row = 3, column = 0, columnspan = 2)
KapitelText.grid(row = 0 , column = 0) # Kapitel Text
e_kt.grid(row = 1, column = 0, rowspan= 3) # Eingabefeld Kapitel Text
#e_kt.grid(side=LEFT, fill=Y) # Eingabefeld Kapitel Text
#sb_kt.grid(row = 2, column = 0) # Eingabefeld Kapitel Text
#sb_kt.grid(side=RIGHT, fill=Y) # Eingabefeld Kapitel Text
# Buttons -----------------------------------------------------------------
frame4.grid(row = 4, column = 1)
a_f.grid(row = 1, column = 0, columnspan = 2)# Ausgabe Feld
b_te_button.grid(row = 0, column = 0)# Button Thema erstellen
b_exit_button.grid(row = 0, column = 1)
# Programmende ###############################################################################################
mainloop()