2017-10-10 7 views
0
def roll(): 

    result_Dice = random.randint(1, 6) 

def read_dice_lines(): 

    file2 = open(dice_file_name + '.txt') 
    lines = file2.read().split(',') 
    file2.close() 

    mainMenu.destroy() 
    rollDice = tkinter.Tk() 
    rollDice.title("Roll That Dice!") 

    lblRollOutput = tkinter.Label(rollDice, text="") 
    btnRoll = tkinter.Button(rollDice, text="Roll me!", command=roll) 

    if diceOutPut == "1": 
     lblRollOutput.config(text=lines[0]) 
    elif diceOutPut == "2": 
     lblRollOutput.config(text=lines[1]) 
    elif diceOutPut == "3": 
     lblRollOutput.config(text=lines[2]) 
    elif diceOutPut == "4": 
     lblRollOutput.config(text=lines[3]) 
    elif diceOutPut == "5": 
     lblRollOutput.config(text=lines[4]) 
    elif diceOutPut == "6": 
     lblRollOutput.config(text=lines[5]) 
    else: 
     lblRollOutput.config(text="There has been an error, sorry.") 

def createDice(): 

    mainMenu.destroy() 

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

    global lblName 
    global entName 
    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) 
    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() 
    lblOutcomes.pack() 
    entOut1.pack() 
    entOut2.pack() 
    entOut3.pack() 
    entOut4.pack() 
    entOut5.pack() 
    entOut6.pack() 
    btnConfirm.pack() 

def createDice2(): 

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

    name = entName.get() 
    nameTxt = name + ".txt" 
    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.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(): 
    for dice_file_name in glob.glob('*.txt'): 
     print(dice_file_name) 
     btnDie = tkinter.Button(frameCustomDice, text=os.path.splitext, command=read_dice_lines(dice_file_name)[0]) 
     btnDie.pack() 
     mainMenu.update() 
def exit(): 

    sys.exit() 

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) 
    btnExit = tkinter.Button(mainMenu, text="Exit", command=exit) 

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

    mainMenu.mainloop() 
mainMenu() 

Je crée un programme dans lequel vous pouvez créer vos propres dés et les utiliser ensuite. En haut de mon code j'essaie de mettre dans une liste les 6 lignes qui sont dans un fichier pour les dés. Quand je lance le code et appuie sur 'Load Dice' il arrive avec cette erreur: btnDie = tkinter.Button (frameCustomDice, texte = os.path.splitext, commande = read_dice_lines (nom_du_fichier) [0]) TypeError: read_dice_lines () prend 0 arguments de position mais 1 a été donné, comment vais-je résoudre ce problème? Toute aide sera grandement appréciée.Erreur lors de la lecture des lignes d'un fichier (Python)

+0

Pourquoi tant de variables 'global'? – pstatix

+0

Parce que si j'ai besoin d'utiliser quelque chose ailleurs, je l'aurais déjà global. –

+0

Ensuite, vous devriez reconcevoir afin d'utiliser efficacement les variables locales en passant des arguments. – pstatix

Répondre

0

Vous devez ajouter cet argument à la fonction à accepter. Il est actuellement def read_dice_lines():

Modifier à:

def read_dice_lines(dice_file_name): 

Comme un heads-up, que vous appelez ici command=read_dice_lines(dice_file_name)[0] vous allez rencontrer des problèmes supplémentaires, comme read_dice_lines ne retourne rien, est par défaut à None. Et vous essayez alors d'obtenir le premier elemet [0] de None et il va générer une erreur. Donc, vous devrez supprimer le [0] ou retourner une liste, un uplet ou quelque chose d'indexable.