2017-10-04 3 views
0
def createDice(): 

    mainMenu.destroy() 

    global createMenu 
    createMenu = tkinter.Tk() 
    createMenu.title("Dice Maker.") 

    global lblName 
    global entName 
    global lblPassword 
    global entPassword 
    global lblOutcomes 
    global entOut1 
    global entOut2 
    global entOut3 
    global entOut4 
    global entOut5 
    global entOut6 
    global btnConfirm 

    lblName = tkinter.Label(createMenu, text="What would you like to call your dice? Dont put .(file type) at the end.") 
    entName = tkinter.Entry(createMenu) 
    lblPassword = tkinter.Label(createMenu, text="If you would like a password in order\n to use your dice, enter one.") 
    entPassword = tkinter.Entry(createMenu) 
    lblOutcomes = tkinter.Label(createMenu, text="Enter the outcomes for the dice, the bottom one is outcome 6.") 

    entOut1 = tkinter.Entry(createMenu) 
    entOut2 = tkinter.Entry(createMenu) 
    entOut3 = tkinter.Entry(createMenu) 
    entOut4 = tkinter.Entry(createMenu) 
    entOut5 = tkinter.Entry(createMenu) 
    entOut6 = tkinter.Entry(createMenu) 
    btnConfirm = tkinter.Button(createMenu, text="Confirm", command=createDice2) 

    lblName.pack() 
    entName.pack() 
    lblPassword.pack() 
    entPassword.pack() 
    lblOutcomes.pack() 
    entOut1.pack() 
    entOut2.pack() 
    entOut3.pack() 
    entOut4.pack() 
    entOut5.pack() 
    entOut6.pack() 
    btnConfirm.pack() 

def createDice2(): 

    global name 
    global nameTxt 
    global password 
    global out1 
    global out2 
    global out3 
    global out4 
    global out5 
    global out6 

    name = entName.get() 
    nameTxt = name + ".txt" 
    password = entPassword.get() 
    out1u = entOut1.get() 
    out2u = entOut2.get() 
    out3u = entOut3.get() 
    out4u = entOut4.get() 
    out5u = entOut5.get() 
    out6u = entOut6.get() 

    out1 = out1u + "\n" 
    out2 = out2u + "\n" 
    out3 = out3u + "\n" 
    out4 = out4u + "\n" 
    out5 = out5u + "\n" 
    out6 = out6u + "\n" 

    f = open(nameTxt, 'w') 
    f.write(out1) 
    f.write(out2) 
    f.write(out3) 
    f.write(out4) 
    f.write(out5) 
    f.write(out6) 
    f.write(password) 
    f.close() 

    createMenu.destroy() 
    restartpls = tkinter.Tk() 
    restartpls.title("Restart this program") 

    lblrestart = tkinter.Label(restartpls, text="Please restart this program, this is needed so that\n the program can see that you have created\n a new dice.") 
    lblrestart.pack() 

    restartpls.mainloop() 
    sys.exit() 

def loadDice(): 
#see the other .txt files around the python file and make a button for each of them. 
#other code i will do. 

def mainMenu(): 
    global mainMenu 
    mainMenu = tkinter.Tk() 
    mainMenu.title("Menu") 

    btnCreateDice = tkinter.Button(mainMenu, text="Create Dice", command=createDice) 
    btnLoadDice = tkinter.Button(mainMenu, text="Load Dice") 
    btnExit = tkinter.Button(mainMenu, text="Exit", command=exit) 

    btnCreateDice.pack() 
    btnLoadDice.pack() 
    btnExit.pack() 

    mainMenu.mainloop() 
mainMenu() 

Lorsque vous exécutez ce code, il vous sera demandé de créer un dé, quitter ou charger un dé. J'ai codé le programme créer un dés et un bouton de sortie. Je ne peux pas comprendre comment faire python créer un bouton pour chacun des fichiers .txt dans le même dossier que celui-ci et le mettre dans un bouton/s. Ensuite, quand un bouton spécifique est pressé, il mettra les 6 premières lignes de code dans les sorties pour un dé et la 7ème ligne dans un mot de passe.Faire des boutons en appuyant sur lire le texte d'un fichier .txt et l'afficher (Python)

comment faire python créer un bouton pour chacun des fichiers txt/s dans le même dossier que et le mettre dans un bouton/s

Je mets ce code à la définition loadDice(): au fond.

Répondre

0

Voici un exemple de base pour ce faire, en utilisant des globales et sans préserver les objets de bouton (car ils ne sont définis que localement). J'ai mis les boutons dans un cadre afin que vous puissiez emballer les boutons après le bouton Load Dice mais avant le bouton Exit. Je l'ai rendu global pour la simplicité de l'exemple, puisque mainMenu est déjà global, mais j'ai également inclus un exemple commenté comment vous pouvez employer functools.partial pour passer des paramètres aux commandes de bouton. De ce point

import glob 
import functools 
import os 

... the rest of your code 

def loadDice(): 
    for dice_file_name in glob.glob('*.txt'): 
     print(dice_file_name) 
     btnDie = tkinter.Button(frameCustomDice, text=os.path.splitext(dice_file_name)[0]) 
     btnDie.pack() 
    mainMenu.update() 

def mainMenu(): 
    global mainMenu 
    mainMenu = tkinter.Tk() 
    mainMenu.title("Menu") 

    global frameCustomDice 
    frameCustomDice = tkinter.Frame(height=2, bd=1, relief=tkinter.SUNKEN) 

    btnCreateDice = tkinter.Button(mainMenu, text="Create Dice", command=createDice) 
    btnLoadDice = tkinter.Button(mainMenu, text="Load Dice", command=loadDice) 
    # btnLoadDice = tkinter.Button(mainMenu, text="Load Dice", command=functools.partial(loadDice, mainMenu, frameCustomDice)) 
    btnExit = tkinter.Button(mainMenu, text="Exit", command=exit) 

    btnCreateDice.pack() 
    btnLoadDice.pack() 
    frameCustomDice.pack() 
    btnExit.pack() 

    mainMenu.mainloop() 

mainMenu() 

, quelques points à considérer:

  • Essayez et évitez d'utiliser les global des variables, si possible, en passant les variables nécessaires à vos commandes en tant que paramètres.
  • utilisation functools.partial pour fournir une commande personnalisée paramétrées pour chacun des boutons créés dans loadDice, que ce soit en passant le nom de fichier à une fonction (par exemple rollDice), ou de l'analyse des probabilités des côtés des dés à partir du fichier, dans loadDice et en passant ces probabilités à rollDice en tant que paramètres.
  • suivre les boutons chargés, actuellement si vous exécutez deux fois loadButton, il chargera à nouveau les boutons. Je pense que vous pouvez d'abord supprimer tous les boutons du cadre, ou enregistrer des données sur les boutons chargés, et vérifier cela avant de charger un nouveau bouton.
+0

Merci pour l'aide. –