如何将Tkinter GUI按钮定向到子程序?

2024-06-26 10:26:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个exe文件可以运行战舰游戏。独立地,它工作得很好,但是当我把它的代码放在def Zeeslag中时,它不会被执行。有一个按钮的命令指向这个def,但是当你点击它时,什么也没有发生! 正如你可能看到的,我是一个非常有经验的程序员。请帮帮我!你知道吗

from Tkinter import *

root = Tk() 
root.wm_title("Minigames") 
root.config(background = "#4FAC8D") #zeegroen


def Zeeslag():
    from random import randint
    board = [] #dit is het bord

    for x in range(5):  #maakt een rij in het spelbord
        board.append(["O"] * 5)

    def print_board(board): #voegt de rijen samen
        for row in board:
            print " ".join(row)

    print "Laten we zeeslag spelen!"
    print "Er zitten 3 boten van 1 vakje lang verborgen."
    print "Je hebt 10 beurten om te raden waar hij zit."
    print_board(board)

    def random_row(board): #bepaalt y cor
        return randint(1, len(board[0])) #het bord is 5 bij 5

    def random_col(board): #bepaalt x cor
        return randint(1, len(board[0]))

    ship1_row = random_row(board) #maakt  schip 1 aan
    ship1_col = random_col(board)
    ship2_row = random_row(board) #maakt  schip 2 aan
    ship2_col = random_col(board)
    ship3_row = random_row(board) #maakt  schip 3 aan
    ship3_col = random_col(board)

    """" om te testen: 
    print str(ship1_row) +' ' + str(ship1_col)
    print str(ship2_row) +' ' + str(ship2_col)
    print str(ship3_row) +' ' + str(ship3_col) """

    boats_hit=0 #je moet in totaal 3 boten raken

    for turn in range(10): #10 beurten
      print "Beurt "+ str(turn+1)
      guess_row = int(raw_input("Raad de rij:"))
      guess_col = int(raw_input("Raad de kolom:"))

      if guess_row == ship1_row and guess_col == ship1_col or guess_row == ship2_row and guess_col == ship2_col or guess_row == ship3_row and guess_col == ship3_col :
        print "Gefeliciteerd! Je hebt er een geraakt!"
        board[guess_row-1][guess_col-1]= "G"
        boats_hit +=1
        print_board(board)
        if boats_hit==3: #als je ze alle 3 hebt gevonden
          print 'Je hebt gewonnen'
          break
      elif(guess_row < 1 or guess_row > 5) or (guess_col < 1 or guess_col > 5): #controle
        print "Oeps, dat zit niet op het spelbord."
      elif(board[guess_row-1][guess_col-1] == "X"): #herhaling vermijden
        print "Dat heb je al eerder ingevoerd."
      else:
        print "Fout!"

        board[guess_row-1][guess_col-1] = "X" #foute poging
        print_board(board)


    if turn == 9:
      print "Einde Spel. Ze zaten hier!"
      board[ship1_row-1][ship1_col-1]= "S" #zet S neer op de plekken van de boten
      board[ship2_row-1][ship2_col-1]= "S"
      board[ship3_row-1][ship3_col-1]= "S"
      print_board(board)  





mainFrame = Frame(root, width=200, height = 600)
mainFrame.grid(row=0, column=0, padx=10, pady=2)
mainFrame.config(background="#246952")

Label(mainFrame, text="Kies welk spel je wilt spelen ").grid(row=0, column=0, padx=10, pady=2)

btnFrame = Frame(mainFrame, width=200, height = 200)
btnFrame.grid(row=0, column=1, padx=10, pady=2)

zeeslagBtn = Button(btnFrame, text="Zeeslag", command=Zeeslag)
zeeslagBtn.grid(row=0, column=0, padx=10, pady=2)



root.mainloop()

Tags: orinboarddefdecolrandomroot