2017-02-05 3 views
-1

Ich habe eine ähnliche Frage dazu vor gefragt, aber ich kann nie scheinen, um eine Lösung zu erhalten, die richtig (wahrscheinlich bis zu meinem Mangel an Programmierkenntnisse)Cue Card Programm in Python

Ich versuche, funktioniert ein erstellen "Stichwortkarte" -System. Karten zu einem Programm hinzufügen, sie in bestimmten Decks speichern und dann diese Decks ihre Karten ausgeben lassen, wenn sie dazu aufgefordert werden. Ich verwende Tkinter als meine GUI dafür. Soweit ist das mein Code;

from tkinter import * 
root = Tk() 

question_list = [] 
topic_list = [] 
data = defaultdict(list) 

x = 5 
while x > 0: 
    question = input("what is your question?") 
    topic = input("what is the topic of the question?") 
    if question not in question_list: 
     question_list.append(question) 
    if topic not in topic_list: 
     topic_list.append(topic) 
    x -=1 

def display_deck(): 
    top = Toplevel() 
    for i in data: 
     if i == topic: 
      button2 = Button(top, text=data[i], fg="black") 
      button2.pack() 

for topic, question in zip(topic_list, question_list): 
    data[topic].append(question) 

for y in topic_list: 
    button = Button(root, text=y, fg="black", command=display_deck) 
    button.pack() 

root.mainloop() 

Es fragt den Benutzer 5 Fragen und fügt dann die Taste des „Thema“ in das Stammfenster. Wenn diese Themenschaltfläche angeklickt wird, möchte ich nur die Fragen in diesem Thema anzeigen. Derzeit werden jedoch alle Fragen angezeigt. Ich habe versucht, Wörterbücher zu verwenden, aber das schien nicht zu funktionieren. Jede Hilfe sehr geschätzt. (When I have clicked the maths button this is the Output of the program)

Nach Bearbeiten

denke ich, der Untergang des Wörterbuchs der Zip-Methode ist die Verwendung als nicht jedes Element in der Liste wird gepaart wird, aber ich bin wirklich nicht sicher. Die Ausgabe, wenn ein Wörterbuch mit und auf die Mathematik-Taste here gesehen

+0

direkt Der aktuelle Code keine Mühe macht, die Fragen nach Themen zu trennen. Können Sie zeigen, was Sie mit Wörterbüchern versucht haben, da dies der natürliche Ansatz ist? – Blckknght

+0

@Blckknght Ich habe das Wörterbuch, das ich versuchte, um den Code oben zu verwenden^ – Seb

+0

mit 'wenn Thema nicht in topic_list:' Sie haben 'topic_list' kürzer als' question_list' und dann 'zip (topic_list, question_list)' geben falsche Ergebnisse. Vielleicht fügen Sie die Themenfrage direkt zu "Daten" hinzu. – furas

Antwort

1

es topic-question direkt an data hinzuzufügen und so nur topic_list Schaltflächen zu erstellen.

Ich sende topic zu funktionieren mit lambda zu Tastenfunktion mit Argument zuweisen.

Da lambda in for-loop seltsam arbeiten kann, so verwende ich arg=topic statt display_deck(topic)

import tkinter as tk 
from collections import defaultdict 

# --- functions --- 

def display_deck(topic): 
    top = tk.Toplevel() 
    for question in data[topic]: 
     button = tk.Button(top, text=question) 
     button.pack() 

# --- main --- 

topic_list = [] 
data = defaultdict(list) 

# ask for 5 question-topic 
for _ in range(5): 
    question = input("what is your question?") 
    topic = input("what is the topic of the question?") 

    # keep topic to create buttons 
    if topic not in topic_list: 
     topic_list.append(topic) 

    # add topic-question directly to data 
    data[topic].append(question) 

root = tk.Tk() 

# create buttons 
for topic in topic_list: 
    # assign function with argument 
    button = tk.Button(root, text=topic, command=lambda arg=topic:display_deck(arg)) 
    button.pack() 

root.mainloop() 
+0

vielen dank !!!! – Seb