2013-08-24 2 views
1

Прошу прощения за вставку всего моего кода. Я не понимаю, как я должен опубликовать этот вопрос. Я искал другие ответы на протяжении всей этой недели, но я не могу, чтобы жизнь меня поняла. Я знаю, что мне нужно сделать больше, чтобы заставить эту программу работать, но я просто пытаюсь обновить метку team_at_play. Я пробовал печатать переменные и team_at_play.set() и team_at_play = team_b.get(). Печать team_at_play.get() показывает команду, чей ход она есть, но метка не обновляется.Большинство ярлыков хорошо обновляется, за исключением одного

Кроме того, я поставил функции, такие как coin_toss() и т. Д. В нужном месте по отношению к mainloop?

Вот ссылка на текстовый файл, который может быть загружен из пункта меню: «Abrir Capitulo»:

http://www.mariacarrillohighschool.com/Teachers/JamesBaptista/Spanish7-8/ClassDocuments/Handouts/expres_1_1.txt

Любая помощь будет принята с благодарностью!

#!/usr/local/bin/env python 
# -*- coding: utf-8 -*- 
## Recall Game 

"""This will be a timed game of vocabulary recall that will focus on 
all the previous units studied. If possible, the sessions will have 
a time limit, so teams might compete against one another. 
Teams will win points according to how many answers are given correctly. 
Questions will be randomly selected.""" 
import sys 
import time 
import csv 
import StringIO 
import random 
import string 
from Tkinter import * 
import ttk 
import tkFont 

def score_calc (answer): 
##Returns a point value for the expression in play 
    score = 0 
    ##print ('Answer'), answer 
    for i in len(answer): ##Thanks to user2357112 
     score += 1 
    return score 


master = Tk() 
master.title("Araña en la Cabaña") 
master.geometry=("800x800+200+200") 
master.configure(background="black") 

from random import choice 
d={} 
team_A= StringVar() 
team_B= StringVar() 
team_A_score= IntVar() 
team_B_score= IntVar() 
team_at_play = StringVar() 
pregunta = StringVar() 
answer = StringVar() 
turn = 0 

correct_answer = StringVar() 

feedback=StringVar() 
correct = ['!Sí!', '¡Muy bien!', '¡Excelente!', '¡Fabuloso!'] 
incorrect =['¡Caramba!', '¡Ay, ay, ay!', '¡Uy!'] 


def select_expression(): 
## Returns at random an expression 
    ##print ('select_expression beginning') 
#  print len(d) 
    selected_question = '' 
    global pregunta 
    print ('select_expression at work') 
    try: 
     selected_question =random.choice(d.keys()) ##Problem selecting random key 
     pregunta.set(selected_question) 
     print 'Pregunta =', pregunta.get() 
     answer.set(d[selected_question]) 
     print 'Answer =', answer.get() 
     ##return pregunta Thanks to user2357112 
     ##return answer Thanks to user2357112 
    except IndexError: 
     print ('Error') 
     pass 
    ##print pregunta 

def coin_toss(): 
## Tosses a coin to see who goes first. Returns even or odd integer 
    print ('Coin toss at work.') 
    from random import randint 
    coin_toss = randint(0,1) 
    if coin_toss == 0: 
     turn = 3 
    if coin_toss == 1: 
     turn = 4 
    return turn  

def player_turn(): 
## Prompts players or teams during turns. Updates scoreboard. 
    print ('Player_turn() at work.') 
    global team_at_play 
    global turn  
    while turn < 1: 
     turn = coin_toss() 
     team_A_score.set(0) 
     team_B_score.set(0) 
     print 'turn =', turn 

    if turn %2== 0: 
     print 'turn=',turn 
     print ('Team_B:'), team_B.get() 
     team_at_play= team_B.get() 
     print 'Team_at_play:', team_at_play 
     select_expression() 

    if turn %2!= 0: 
     print 'Turn=', turn 
     print ('Team_A:'), team_A.get() 
     team_at_play= team_A.get() 
     print 'Team_at_play:', team_at_play 
     select_expression() 

def nombrar_equipos(): 
    nombrar_equipos = Toplevel() 
    ##Dialog box for entering the team names. 


    nombrar_equipos.title("Nombrar los Equipos") 
    first_team_label = Label(nombrar_equipos,text="El primer equipo:") 
    first_team_label.grid(column=0, row=1) 

    second_team_label = Label(nombrar_equipos,text="El segundo equipo:") 
    second_team_label.grid(column=0, row=0) 
    team_A_entry = Entry(nombrar_equipos,width =20, textvariable=team_A) 
    team_A_entry.grid(column=1, row=0) 
    team_A_entry.focus_set() 
    team_B_entry = Entry(nombrar_equipos, width =20, textvariable=team_B) 
    team_B_entry.grid(column=1, row=1) 
    entregar_button=Button(nombrar_equipos, text ="Entregar", command=nombrar_equipos.destroy) 
    entregar_button.grid(column=1,row=2) 


def abrir_capitulo(): 
    ##Dialog box for selecting the chapter to be loaded. 
    #this will hide the main window 
    import tkFileDialog 
    WORDLIST_FILENAME = tkFileDialog.askopenfilename(parent=master,title="Archivo para abrir", defaultextension=".txt") 
    global d 
    d = {} 
    with open(WORDLIST_FILENAME) as fin: 
      rows = (line.split('\t') for line in fin) 
      d = {row[0]:row [1] for row in rows} 
    for k in d: 
     d[k]= d[k].strip('\n') 
    ## print ('Line 68') 
    inv_d = {v:k for k, v in d.items()} 
    ##print inv_d 
    d.update(inv_d) 
    print d 
    print ('¡'), len(d), ('expresiones cargadas!') 
    return d 

def check_response(*args): 
     ##checks a team's answer, rewards points if correct. 
     if team_at_play.get() == team_A.get(): 
      if team_answer==answer: 
       team_A_score.set(team_A_score.get() + score_calc (d[pregunta])) 
       turn += 1 

      if team_answer != answer: 
       turn += 1 

     if team_at_play.get() == team_B.get(): 
      if team_answer==answer: 
       team_B_score.set(team_B_score.get() + score_calc (d[pregunta])) 
       turn += 1 

      if team_answer != answer: 
       turn += 1 


class App: 
    def __init__(self, master): 
     frame = Frame(master) 

     master.puntuacion= Label(master, text="Araña en la Cabaña", font=("American Typewriter", 30),bg="black", fg="red", justify=CENTER) 
     master.puntuacion.grid(row=0, column=2) 

     master.team_A_label= Label(master, textvariable= team_A, font=("American Typewriter", 24),bg="black", fg="red") 
     master.team_A_label.grid(row=1, column=1) 
     master.team_B_label= Label(master, textvariable= team_B, font=("American Typewriter", 24),bg="black", fg="red") 
     master.team_B_label.grid(row=1, column=3) 

     master.team_A_score_label= Label(master, textvariable= team_A_score, font=("04B", 24),bg="black", fg="yellow").grid(row=2, column=1) 
     # team_A_score_label= tkFont.Font(family="Times", size=20, weight=bold, color=red) 
     master.team_B_score_label= Label(master, textvariable= team_B_score, font=("04B", 24),bg="black", fg="yellow") 
     master.team_B_score_label.grid(row=2, column=3) 

     master.team_at_play_label= Label(master, textvariable= team_at_play, font=("American Typewriter", 24),fg="yellow", bg="black") 
     master.team_at_play_label.grid(row=4, column=2) 

     master.pregunta_start = Label(master, text="¿Cómo se traduce....?", font=("American Typewriter", 24),fg="blue",bg="black") 
     master.pregunta_start.grid(row=6, column=2) 

     master.pregunta_finish = Label(master, textvariable = pregunta, font=("American Typewriter", 24),fg="green",bg="black") 
     master.pregunta_finish.grid(row=7, column=2) 

     master.team_answer = Entry(master, width=50) 
     master.team_answer.grid(row=8, column=2) 
     master.team_answer.focus_set() 
     master.feedback_label = Label(textvariable= feedback, font=("American Typewriter", 24),fg="green",bg="black") 
     master.feedback_label.grid(row=9, column=2) 

     respond_button = Button(master, text="Responder",bg="black", command=check_response, justify=CENTER, borderwidth=.001) 
     respond_button.grid(row=10, column=3) 
     master.bind("<Return>", check_response) 

     continue_button = Button(master, text="Adelante", bg="black", command=player_turn) 
     continue_button.grid(row=10, column=4)   

menubar = Menu(master) 
filemenu= Menu(menubar,tearoff=0) 
filemenu.add_command(label="Nombrar Equipos",command=nombrar_equipos) 
filemenu.add_command(label="Abrir Capítulo",command=abrir_capitulo) 

filemenu.add_separator() 

filemenu.add_command(label="Cerrar", command=master.quit) 
menubar.add_cascade(label="Archivo",menu=filemenu) 
master.config(menu=menubar) 




master.columnconfigure(0, weight=1) 
master.rowconfigure(0, weight=1) 
app= App(master) 
master.mainloop() 
+0

Что вы ожидаете от двух операторов возврата в строке? У вас есть две строки в 'select_expression'; второй никогда не будет достигнут, потому что первый в пути. – user2357112

+0

Почему 'score_calc' перебирает свой вход? Похоже, вы могли просто использовать 'len (answer)'. – user2357112

+0

пользователь2357112: Спасибо. Я помещаю их туда, потому что я не уверен, что обе эти переменные будут обновлены вне функции. Можно ли вернуть две переменные, такие как: return answer, pregunta? –

ответ

0

Мне пришлось внести изменения в player_turn(). Я экспериментировал с изменением textvariable для разных меток в главном кадре и решил, что проблема была изолирована от player_turn. Затем я посмотрел на разницу между этими и другими функциями, которые я написал. Возможно, лучший способ установить StringVar равным другому, но я придумал это, чтобы создать промежуточную переменную, в которую я установил team_at_play.

def player_turn(): 
## Prompts players or teams during turns. Updates scoreboard. 
    print ('Player_turn() at work.') 
#  global team_at_play 
    global turn  
    while turn < 1: 
     turn = coin_toss() 
     team_A_score.set(0) 
     team_B_score.set(0) 
     print 'turn =', turn 

    if turn %2== 0: 
     print 'turn=',turn 
     print ('Team_B:'), team_B.get() 
     playing_team= team_B.get() 
     team_at_play.set(playing_team) 
     print 'Team_at_play:', team_at_play 
     select_expression() 

    if turn %2!= 0: 
     print 'Turn=', turn 
     print ('Team_A:'), team_A.get() 
     playing_team=team_B.get() 
     team_at_play.set(playing_team) 
     print 'Team_at_play:', team_at_play 
     select_expression() 
Смежные вопросы