leider verstehe ich mal wieder einen Ablauf nicht.
Dieses kleine Programm ist ein Modul, das aus dem Hauptprogramm eine Information erhält, aus einer Datei Adressen erhält und dann ein Schriftstück aufsetzt.
Starte ich nur dieses Modul funktioniert die Adressauswahl wie gewollt (es gibt zwar bestimmt elegantere Wege, die hab ich aber noch nicht gefunden) starte ich das Modul aus dem Hauptprogramm bleibt die Listbox, in der die Namen zur Auswahl aufgelistet werden, leer. Woran kann das liegen?
Die print()-Anweisungen am Ende der Listbox werden in beiden Fällen ausgeführt.
Der Aufruf erfolgt über:
Code: Alles auswählen
def anfordern(self):
Rezept.medis(self)
Rezept.tab(self)
Code: Alles auswählen
import tkinter as tk
from tkinter import (Button, RIGHT, LEFT, E, W, N, Frame, RIDGE, SUNKEN, Menu,
Label, Entry, Tk, CENTER, Radiobutton, StringVar,
messagebox,Text, Listbox, ttk, OptionMenu)
from subprocess import Popen
import os
import webbrowser
import json
BGC = 'darkred' # Hintergrund
FGC = 'white' # Schrift
fontA = ('Arial', 12)
class Rezepte:
def __init__(rezept):
rezept.medis()
#rezept.auswahlfeld()
rezept.tab()
#rezept.test()
def medis(rezept):
rezept.fenster = Tk()
rezept.fenster.title("Rezeptanforderung")
rezept.fenster.config(bg='darkred')
global daten
try:
data = open('arztliste','r')
daten = json.load(data)
data.close()
except:
rezept.docs = ("leer", " ")
### Auslesen der Namen für Optionsfeld
global namensliste, rezept_docs
anzahl = len(daten["data"])-1
zaehler = 0
i=1 # indices
namensliste = ["leer"]
while zaehler < anzahl:
name = daten["data"][i]["Name"]
i = i + 1
zaehler = zaehler + 1
namensliste += [(name)]
rezept_docs = tk.Variable(value=namensliste)
rezept.titel = Label(rezept.fenster, bg=BGC, fg=FGC,
text="Rezepte anfordern für:",
font=('Arial', 14))
rezept.titel.grid(column=0, row=0, columnspan=2, padx=30, pady=10)
rezept.medikamente = Entry(rezept.fenster, width=20,
selectbackground='lime')
rezept.button_druck = Button(rezept.fenster, command=druck,
text="Drucken")
rezept.button_mail = Button(rezept.fenster, command=mail,
text="Mailen")
rezept.button_save = Button(rezept.fenster, command=save,
text="Arzt speichern")
rezept.medikamente.grid(column=0, row=2, columnspan=2, padx=10, pady=10)
rezept.dr_anrede = Label(rezept.fenster, bg=BGC, fg=FGC,
text="Anrede/Titel", font=fontA)
rezept.dr_anredeEntry = Entry(rezept.fenster, width=10)
rezept.dr_Vname = Label(rezept.fenster, bg=BGC, fg=FGC,
text="Vorname", font=fontA)
rezept.dr_VnameEntry = Entry(rezept.fenster, width=15)
rezept.dr_Nname = Label(rezept.fenster, bg=BGC, fg=FGC,
text="Nachname", font=fontA)
rezept.dr_NnameEntry = Entry(rezept.fenster, width=20)
rezept.dr_adr = Label(rezept.fenster, bg=BGC, fg=FGC,
text="Adresse", font=fontA)
rezept.dr_adrEntry = Entry(rezept.fenster, width=40)
#### Frame für PLZ und Ort
rezept.dr_codeFrame = Frame(rezept.fenster, bg=BGC)
rezept.dr_plz = Label(rezept.dr_codeFrame, bg=BGC, fg=FGC,
width=10, text="PLZ", font=fontA).pack(side=LEFT)
rezept.dr_plzEntry = Entry(rezept.dr_codeFrame, width=6)
rezept.dr_plzEntry.pack(side=LEFT)
rezept.dr_ort = Label(rezept.dr_codeFrame, bg=BGC, fg=FGC,
text="Ort", font=fontA).pack(side=LEFT, padx=5)
rezept.dr_ortEntry = Entry(rezept.dr_codeFrame, width=20)
rezept.dr_ortEntry.pack(side=LEFT, padx=5)
#### /Frame
rezept.dr_eMail = Label(rezept.fenster, bg=BGC, fg=FGC,
text="eMail", font=fontA)
rezept.dr_eMailEntry = Entry(rezept.fenster, width=30)
rezept.medikamente.grid(column=0, row=2, columnspan=2, padx=10, pady=10)
rezept.dr_anrede.grid(column=0, row=3, sticky='W')
rezept.dr_anredeEntry.grid(column=1, row=3, sticky='W')
rezept.dr_Vname.grid(column=0, row=4)
rezept.dr_VnameEntry.grid(column=1, row=4, sticky='W')
rezept.dr_Nname.grid(column=2, row=4)
rezept.dr_NnameEntry.grid(column=3, row=4, padx=5, pady=5)
rezept.dr_adr.grid(column=0, row=5)
rezept.dr_adrEntry.grid(column=1, row=5, columnspan=3, sticky='W')
rezept.dr_codeFrame.grid(column=0, row=6, columnspan=4, pady=5,
sticky='W')
rezept.dr_eMail.grid(column=0, row=7)
rezept.dr_eMailEntry.grid(column=1, row=7, columnspan=3, sticky='W')
rezept.button_druck.grid(column=0, row=8, pady=10)
rezept.button_mail.grid(column=1, row=8)
rezept.button_save.grid(column=3, row=8)
option_menu = Listbox(
rezept.fenster,
listvariable = rezept_docs,
height = 10,
selectmode = tk.BROWSE)
option_menu.grid(column=4, row=1, rowspan=6, padx=5)
print("namensliste", namensliste)
print("Vari: ", rezept_docs.get())
def geklickt(event):
global arzt_auswahl
auswahl = option_menu.curselection()
auswahl = str(auswahl)
auswahl = auswahl.strip("(")
auswahl = auswahl.split(",")[0]
if auswahl not in ")":
auswahl_1 = int(auswahl)
arzt_auswahl = namensliste[auswahl_1]
wahl = namensliste.index(arzt_auswahl)
rezept.auswahl()
option_menu.bind('<<ListboxSelect>>', geklickt)
def auswahl(rezept, *args):
'''Zeigt die Adressen nach Vorgabe des Optionfeldes.'''
auswahl = arzt_auswahl
key = namensliste.index(auswahl)
try:
rezept.dr_anredeEntry.delete(0, 'end')
rezept.dr_VnameEntry.delete(0, 'end')
rezept.dr_NnameEntry.delete(0, 'end')
rezept.dr_adrEntry.delete(0, 'end')
rezept.dr_plzEntry.delete(0, 'end')
rezept.dr_ortEntry.delete(0, 'end')
rezept.dr_eMailEntry.delete(0, 'end')
rezept.dr_anredeEntry.insert(0, daten["data"][key]["Anschrift"][
0]["Anrede"])
rezept.dr_VnameEntry.insert(0, daten["data"][key]["Anschrift"][
0]["Vorname"])
rezept.dr_NnameEntry.insert(0, daten["data"][key]["Anschrift"][
0]["Nachname"])
rezept.dr_adrEntry.insert(0, daten["data"][key]["Anschrift"][
0]["adr"])
rezept.dr_plzEntry.insert(0, daten["data"][key]["Anschrift"][
0]["PLZ"])
rezept.dr_ortEntry.insert(0, daten["data"][key]["Anschrift"][
0]["Ort"])
eMail = daten["data"][key]["Anschrift"][0]["email"]
rezept.dr_eMailEntry.insert(0, eMail)
except: pass
if key != 0:
rezept.button_save.config(state='disabled')
else:
rezept.button_save.config(state='active')
def tab(rezept):
'''Holt die Medikamente die gekennzeichnet wurden'''
try:
if rezept.med1Control.cget('text') == "w":
med1 = rezept.med1Med.get()
else: med1 = " "
if rezept.med2Control.cget('text') == "w":
med2 = rezept.med2Med.get()
else: med2 = " "
if rezept.med3Control.cget('text') == "w":
med3 = rezept.med3Med.get()
else: med3 = " "
if rezept.med4Control.cget('text') == "w":
med4 = rezept.med4Med.get()
else: med4 = " "
if rezept.med5Control.cget('text') == "w":
med5 = rezept.med5Med.get()
else: med5 = " "
if rezept.med6Control.cget('text') == "w":
med6 = rezept.med6Med.get()
else: med6 = " "
if rezept.med7Control.cget('text') == "w":
med7 = rezept.med7Med.get()
else: med7 = " "
if rezept.med8Control.cget('text') == "w":
med8 = rezept.med8Med.get()
else: med8 = " "
except: med1 = "irgendwas"
try:
if med1 not in " ":
rezept.medikamente.insert(0, med1 +", ")
if med2 not in " ":
rezept.medikamente.insert('end', med2 +", ")
if med3 not in " ":
rezept.medikamente.insert('end', med3 +", ")
if med4 not in " ":
rezept.medikamente.insert('end', med4 +", ")
if med5 not in " ":
rezept.medikamente.insert('end', med5 +", ")
if med6 not in " ":
rezept.medikamente.insert('end', med6 +", ")
if med7 not in " ":
rezept.medikamente.insert('end', med7 +", ")
if med8 not in " ":
rezept.medikamente.insert('end', med8)
except: pass
global anforderung
anforderung = rezept.medikamente.get()
rezept.fenster.mainloop()
def save():
'''Speichert die neuen Adressen'''
print("Speichern gedrückt")
def druck():
'''Erzeugt eine txt-Datei'''
print("Drucken gedrückt")
def mail():
'''erzeugt eine eMail'''
print("eMail gedrück")
def main():
r=Rezepte()
if __name__ == '__main__':
print("Modul für Rezeptanforderung."
"\nTeil von Tabletten ab Version 1.7.")
main()
Das Hauptprogramm verwaltet meine Medikamente, ist also etwas rein privates,
das ich auf der Suche nach was sinnvollem angefangen habe.
Die def main, save und druck enden nur zur Übersichtlichkeit in print()
Als Arztliste verwende ich eine Datei mit dem Namen: arztliste
Mit diesem Inhalt:
Code: Alles auswählen
{"data":[{}, {"Name": "Eysenbarth", "Anschrift": [{"Anrede": "Dr", "Vorname": "Johan Andreas", "Nachname": "Eysenbarth", "adr": "fahrend", "PLZ": "34346", "Ort": "Hann. Münden", "email": "witte-witt@bum.bum"}]}, {"Name": "Watson", "Anschrift": [{"Anrede": "Dr.", "Vorname": "John", "Nachname": "Watson", "adr": "Baker Street 221B", "PLZ": "NX", "Ort": "London", "email": "keine"}]},{"Name":"Jekyll","Anschrift": [{"Anrede":"Dr","Vorname":"Henry","Nachname":"Jekyll","adr":"","PLZ":"","Ort":"London","email":""}]}]}