2017-08-08 3 views
0

Niemals Tkinter vor und ich bin nicht ganz sicher, was damit zu tun oder wie es funktioniert. Windows IDLE-Shell.Tkinter Bestätigung Tasten und Spiel GUI (Spleiß (?))

import time 
from tkinter import * 

input("Press enter to begin...") 

print ("Welcome Traveller!") 
time.sleep(1) 
def name_identify(): 
    print() 
    global name_input 
    name_input = input ("What is your name? ").lower() 
    name_input = name_input.title() 
    time.sleep(0.75) 
    def name_confirm(): 
     print() 
     print ("So %s is your name then?" % name_input) 
     time.sleep(1.5) 
     print() 
     confirmation = input ("Are you sure? Yes or No? ").lower() 
     if confirmation == "Yes" or confirmation == "yes" or confirmation == "aye" or confirmation == "yay": 
      print("") 
      print ("Then %s, let your adventure begin..." % name_input) 
     elif confirmation == "no" or confirmation == "No" or confirmation == "nay": 
      name_identify() 
     else: 
      print ("Please answer with either yes or no young traveller.") 
      time.sleep(2) 
      name_confirm() 
    name_confirm()   
name_identify() 

Wenn möglich, möchte ich das Spiel in eine kleine gui mit tkinter gemacht einfach den Mini-Text-Adventure machen Tests im, leichter zu navigieren, wenn die Leute es spielen, als solche möchte ich die erforderliche "drehen Ja "und" Nein "Antworten müssen in Tasten eingegeben werden, so dass der Spieler zum Beenden nicht die Tastatur berühren muss. Problem ist, ich habe keine Idee, wie man alle Daten in die kleine tkiner Schnittstelle zusammen mit den Knöpfen erhält, die arbeiten, wie ich vorhabe.

Ich kann die Wurzel, die Tasten und die Tasten selbst enthält, auf einer sehr grundlegenden Ebene (wahrscheinlich nicht einmal richtig) erstellen, aber ich weiß nicht, wie Parameter und Variablen zu den Tasten verknüpfen, noch, wie Sie den Text platzieren In die erstellte Konsole, alle meine Versuche haben einfach mit Schleifen beendet oder die Konsole einfach nicht geöffnet.

from tkinter import * 

def main(): 
    root = Tk() 
    root.title("Tkinter Test") 
    root.minsize(width=200, height=120) 
    root.maxsize(width=400, height=240) 

    button = Button(root, text="This is a button!", width=20, height=5) 
    button.pack() 

    root.mainloop() 
if __name__ == '__main__': 
    main() 

Ich danke wer auch immer im Voraus hilft, auch eine Vorlage wäre eine große Hilfe abzuarbeiten, wie ich nur anpassen und ändern, bis es passt meine Bedürfnisse, aber wenn jemand so freundlich sein würde als eine einfache Vorlage zu machen für mich wäre ich aufgrund des unten stehenden Bildes dankbar, da ich möchte, dass es einem einfachen, ähnlichen Flow folgt. Und wenn das Bild nicht klar genug ist. Und vielleicht ein Ratschlag zum Ausrichten der Knöpfe und des Textes, wenn es für Sie möglich ist.

Possible template, grateful for.

+0

Lady Glück lächelt. Wenn Sie neu bei tKinter sind, starten Sie hier: http://effbot.org/tkinterbook/ –

Antwort

1

Der Code unten zeigt, wie Sie dies erreichen können und ist zu erklären, kommentiert:

from tkinter import * 

root = Tk() #declares that the main window belongs to root 
frame = Frame(root) #creates a frame inside the main window so that we don't destroy the actual window when we refresh 

def command1(frame): 
    frame.destroy() #destroys the frame and everything in it 
    frame = Frame(root) #new frame 
    label1 = Label(frame, text="What is your name?") #text label 
    entry1 = Entry(frame) #entry widget 
    button1 = Button(frame, text="Ok", command=lambda:command2(frame, entry1)) #continue button 
    frame.pack() #packs item 
    label1.pack() #packs item 
    entry1.pack() #packs item 
    button1.pack() #packs item 

def command2(frame, entry1): 
    var = entry1.get() #gets the text entered in the last phase and stores it before the item is destroyed 
    frame.destroy() #destroys the frame and everything in it 
    frame = Frame(root) #new frame 
    label1 = Label(frame, text="So %s is your name then? Are you sure?" % var) #text label 
    button1 = Button(frame, text="Yes", command=lambda:command3(frame, var)) #yes button 
    button2 = Button(frame, text="No", command=lambda:command1(frame)) #no button 
    frame.pack() #packs item 
    label1.pack() #packs item 
    button1.pack() #packs item 
    button2.pack() #packs item 

def command3(frame, var): 
    frame.destroy() #destroys the frame and everything in it 
    frame = Frame(root) #new frame 
    label1 = Label(frame, text="Then %s, let your adventure begin..." % var) #text label 
    frame.pack() #packs item 
    label1.pack() #packs item 

label1 = Label(frame, text="Press below to begin...") #text label 
button1 = Button(frame, text="Begin", command=lambda:command1(frame)) #begin button 

frame.pack() #packs item 
label1.pack() #packs item 
button1.pack() #packs item 

root.mainloop() #starts event loop 

ich noch http://effbot.org/tkinterbook/ als Ausgangspunkt für tkinter empfehlen würde.


Die unten zeigt, wie Sie die beiden Tasten ausrichten können nebeneinander, wird der Code zu zeigen, kommentiert, wo es von der ursprünglichen variiert:

from tkinter import * 

root = Tk() 
frame = Frame(root) 

def command1(frame): 
    frame.destroy() 
    frame = Frame(root) 
    label1 = Label(frame, text="What is your name?") 
    entry1 = Entry(frame) 
    button1 = Button(frame, text="Ok", command=lambda:command2(frame, entry1)) 
    frame.pack() 
    label1.pack() 
    entry1.pack() 
    button1.pack() 

def command2(frame, entry1): 
    var = entry1.get() 
    frame.destroy() 
    frame = Frame(root) 
    frame1 = Frame(frame) #creates lower frame 
    label1 = Label(frame, text="So %s is your name then? Are you sure?" % var) 
    button1 = Button(frame1, text="Yes", command=lambda:command3(frame, var)) #this button is now in the lower frame 
    button2 = Button(frame1, text="No", command=lambda:command1(frame)) #this button is now in the lower frame 
    frame.pack() 
    frame1.pack(side="bottom") #packs lower frame 
    label1.pack() 
    button1.pack(side="left") #packs button left 
    button2.pack(side="right") #packs button right 

def command3(frame, var): 
    frame.destroy() 
    frame = Frame(root) 
    frame1 = Frame(frame) 
    label1 = Label(frame, text="Then %s, let your adventure begin..." % var) 
    frame.pack() 
    label1.pack() 

label1 = Label(frame, text="Press below to begin...") 
button1 = Button(frame, text="Begin", command=lambda:command1(frame)) 

frame.pack() 
label1.pack() 
button1.pack() 

root.mainloop() 
+0

Vielen Dank, die mir geholfen haben, die Grundlagen zum Erstellen von Links auf Schaltflächen und neue Bildschirme zu greifen. Wenn es möglich ist, mit dem, was Sie zur Verfügung gestellt, kann er Tasten für die Ja und Nein (command2) leicht nebeneinander ausgerichtet werden, und kann ich die Farbe des Textes in Etiketten ändern? Ich habe einen Weg gefunden, die Etiketten in Farbe, aber nicht im eigentlichen Text zu markieren. Danke, wenn du kannst. –

+0

Ja, sie können nebeneinander ausgerichtet werden, die Funktion 'pack()' hat ein Attribut '-Seite', so dass Sie sie mit' side = "left" 'und' side = "right" ausrichten können Sie müssen sich einige andere Attribute des Pakets ansehen, damit sie anzeigen, wie Sie sie auch haben möchten. Frames sind auch nützlich, um Widgets auf diese Weise zu verwalten. Wie für Etiketten haben sie ein Attribut '-fg', das die Vordergrundfarbe bedeutet. Sie können die Farbe ändern, indem Sie einfach' fg = "blue" 'für eines der Labels deklarieren. –

+0

Ich habe schon mit dem side = "" in pack gespielt, das sie in Bezug auf das Label links und rechts ausrichtet, allerdings nicht nebeneinander, es richtet sie einfach links oder rechts auf ihren jeweiligen aus Reihen, so werden sie immer noch unter einander sein. –