在允许其他条目之前检查每个文本框是否有一个条目的函数

时间:2015-09-28 11:09:02

标签: python tkinter

我有一个GUI,其中包含12个TK文本小部件,每个小组一个框,每个小部件包含团队中的玩家列表,当程序启动时每个团队都是空的。

用户将选择第一队的球员,然后选择第二队等。我需要一种方法来防止用户在为每个其他球队选择球员之前将第二个球员添加到第一队。选择球队球员的顺序并不重要,只要每个球队必须拥有相同数量的球员才能进入下一轮选秀球员。

我真的很难想出一个这样做的方法,任何建议都会非常感激。我在这里相当新,所以如果这不是这个网站的问题,或者如果我使用了不合适的标签,我道歉。

1 个答案:

答案 0 :(得分:1)

如果用户尝试将球员添加到球队x,您可以确保球队的球员数量少于球队x。这是一种可以实现此目的的方法:

import Tkinter as tk

teams = []

# Initialize teams with no players
for i in range(12):
    teams.append([])

def addPlayer():
    teamNumber = int(teamNumberVar.get()) #Get the team number from the entry
    #You might want to add one to team number because it will be 0-indexed
    #You might want to try/except this in case they enter something which is
    #not a number
    playerName = playerNameVar.get() #Get the player name from the entry

    #Make sure that none of the teams have a lower amount of players
    for team in teams:
    # Check if the team has fewer people
        if len(team) < len(teams[teamNumber]):
            #You can add an error message here
            return

    teams[teamNumber].append(playerName)
    texts[teamNumber].config(state=tk.NORMAL) #Set state to normal so that
    #                                       you can write in the text box
    texts[teamNumber].insert('end', playerName + '\n') #Write player's name
    texts[teamNumber].config(state=tk.DISABLED) #Set state back to disabled


root = tk.Tk()
root.title('Choose teams')

texts = []
#Create the text widgets
for i in range(12):
    text = tk.Text(root, width=30, height=10, state=tk.DISABLED)
    #tk.DISABLED means that the user can't just type into the boxes
    text.grid(row=i//4, column=i%4)
    texts.append(text)

#Create a simple menu for adding players
playerNameVar = tk.StringVar(root)

playerLabel = tk.Label(root, text='Player: ')
playerLabel.grid(row=4, column=0)

playerEntry = tk.Entry(root, textvariable=playerNameVar)
playerEntry.grid(row=4, column=1)

teamNumberVar = tk.StringVar(root)

teamNumberLabel = tk.Label(root, text='Team number: ')
teamNumberLabel.grid(row=4, column=2)

teamNumberEntry = tk.Entry(root, textvariable=teamNumberVar)
teamNumberEntry.grid(row=4, column=3)

addPlayerButton = tk.Button(root, text='Add player', command=addPlayer)
addPlayerButton.grid(row=5, column=0)

root.mainloop()