2016-07-07 3 views
0

私は、ユーザーがtkinterを使ってRock、Paper、Scissorsをプレイできるようにする初心者プログラマーです。私はクラスでtkinterを学んだことはありませんが、これは私の最終的なプロジェクトなので、私は感銘を受ける新しいことを学ぼうとしていました。tkinterボタンが関数を呼び出さない

私はすべての配置方法を見つけ出すことができましたが、私のボタンは何もしないようです。終了ボタンは機能しますが、他にはありません。通訳のエラーは出ていません。どんな助けでも大歓迎です。あなたがする必要があるwinOrLossラベルのテキストを変更するため

from tkinter import * 
from tkinter import ttk 
import random 

def get_computer_hand(): #Picks computer's hand. 

pick = random.randint(1,3) #Randomly chooses a number between 1 and 3. 

if pick == 1: 
    hand = "Rock" 

elif pick == 2: 
    hand = "Paper" 

elif pick == 3: 
    hand = "Scissors" 

return hand 

def setRock(): 
global playerHand 
global computerHand 

playerHand = "Rock" 
computerHand = get_computer_hand() 
runGame(playerHand,computerHand) 

def setPaper(): 
global playerHand 
global computerHand 

playerHand = "Paper" 
computerHand = get_computer_hand() 

runGame(playerHand,computerHand) 

def setScissors(): 
global playerHand 
global computerHand 

playerHand = "Scissors" 
computerHand = get_computer_hand() 
runGame(playerHand,computerHand) 

def setQuit(): 
root.destroy() 

def runGame(player,computer): 

global playerWins 
global computerWins 
global draws 
global win_or_loss 

playerHand = player 
computerHand = computer 

if(player == "Rock"): 

    if(computer == "Paper"): 
     computerWins += 1 
     win_or_loss = "Paper beats Rock. You lose!" 

    elif(computer == "Scissors"): 
     playerWins += 1 
     win_or_loss = "Rock beats Scissors. You win!" 

    else: 
     draws += 1 
     win_or_loss = "Draw!" 

if(player == "Paper"): 

    if(computer == "Rock"): 
     playerWins += 1 
     win_or_loss = "Paper beats Rock. You win!" 

    elif(computer == "Scissors"): 
     computerWins += 1 
     win_or_loss = "Paper beats Rock. You win!" 

    else: 
     draws += 1 
     win_or_loss = "Draw!" 

if(player == "Scissors"): 

    if(computer == "Rock"): 
     computerWins += 1 
     win_or_loss = "Rock beats Scissors. You lose!" 

    elif(computer == "Paper"): 
     playerWins += 1 
     win_or_loss = "Scissors beats Paper. You win!" 

    else: 
     draws += 1 
     win_or_loss = "Draw!" 

root = Tk() 
root.title("Rock Paper Scissors") 

playerWins = 0 
computerWins = 0 
draws = 0 
playerHand = "" 
computerHand = "" 
win_or_loss = "" 

mainFrame = ttk.Frame(root, padding="3 3 12 12") 
mainFrame.grid(column=0, row=0, sticky=(N, W, E, S)) 
mainFrame.columnconfigure(0, weight=1) 
mainFrame.rowconfigure(0, weight=1) 

buttonFrame = ttk.Frame(mainFrame) 
handFrame = ttk.Frame(mainFrame) 

ttk.Label(mainFrame, text="Let's play Rock, Paper, Scissors.   Ready?").grid(column=0,row=0) 

rockButton = ttk.Button(buttonFrame, text="Rock", command = setRock) 
paperButton = ttk.Button(buttonFrame, text="Paper", command = setPaper) 
scissorsButton = ttk.Button(buttonFrame, text="Scissors", command = setScissors) 
quitButton = ttk.Button(buttonFrame, text="Quit", command = setQuit) 

rockButton.pack(side="left",fill=None,expand=False) 
paperButton.pack(side="left",fill=None,expand=False) 
scissorsButton.pack(side="left",fill=None,expand=False) 
quitButton.pack(side="left",fill=None,expand=False) 
buttonFrame.grid(column=0,row=1) 

playerHandLabel = ttk.Label(handFrame, text="You picked: " + playerHand) 
computerHandLabel = ttk.Label(handFrame, text="Computer picked: " +   computerHand) 
playerHandLabel.pack(side="left",fill=None,expand=False) 
computerHandLabel.pack(side="left",fill=None,expand=False) 
handFrame.grid(column=0,row=2) 

winOrLoss = ttk.Label(mainFrame, text=win_or_loss).grid(column=0,row=3) 

ttk.Label(mainFrame, text = "Player Wins: " +   str(playerWins)).grid(column=0,row=4) 
ttk.Label(mainFrame, text = "Computer Wins: " +   str(computerWins)).grid(column=0,row=5) 
ttk.Label(mainFrame, text = "Draws: " + str(draws)).grid(column=0,row=6) 

for child in mainFrame.winfo_children(): child.grid_configure(padx=5, pady=5) 

root.mainloop() 
+2

ボタンは機能しますが、視覚的なフィードバックはありません。彼らは 'playerWins'と' win_or_loss'変数を設定しますが、GUIは更新しません。 –

答えて

0

表示は変わりません:winOrLoss.configure(text=win_or_loss)、ちょうどwin_or_lossを変更すると、ラベル内容は変更されません。あなたがwin_or_loss.set("new string")を行い、ラベルの内容を変更するには、

win_or_loss = StringVar() 
winOrLoss = Label(textvariable=win_or_loss) 

、その後:

もう一つの可能​​性はSTRINGVARを使用することです。

関連する問題