Python:如何将OptionMenu选项与成员列表关联并实现用户名存入对应列表
Solution to Link Team Selections and Add Usernames
No worries, let's get those two features working for your College Tournament app. Here's the adjusted code with clear explanations:
First, let's fix the core gaps in your original code:
- Your entry field and dropdown variable were local to the
userEntrymethod, so we couldn't access their values when the submit button was clicked. - We needed a clean way to map each team option to its corresponding member list instead of messy conditional checks.
Here's the revised full code:
from tkinter import * import tkinter.ttk as ttk # Member lists for each team team1Members = [] team2Members = [] team3Members = [] team4Members = [] # Create a direct mapping between team names and their member lists team_mapping = { "Team1": team1Members, "Team2": team2Members, "Team3": team3Members, "Team 4": team4Members } class CollegeApp(Tk): def __init__(self): Tk.__init__(self) container = ttk.Frame(self) container.pack(side="top", fill="both", expand=True) self.frames = {} for F in (StartPage, selectionPage, TeamsPage): frame = F(container, self) self.frames[F] = frame frame.grid(row=0, column=0, sticky="nsew") self.show_frame(StartPage) def show_frame(self, cont): frame = self.frames[cont] frame.tkraise() class StartPage(ttk.Frame): def __init__(self, parent, controller): self.controller = controller ttk.Frame.__init__(self, parent) self.startMenu() def startMenu(self): # Fixed line break in heading text heading = Label(self, text="College Tournament Points Count Software", font=('Arial', 25)) heading.grid(row=0, column=0, columnspan=2, padx=240, pady=40) start_Btn = Button(self, text="Start", font="Arial 16", width=8, command=lambda: self.controller.show_frame(selectionPage)) start_Btn.grid(row=1, column=0, padx=30, pady=5) exit_Btn = Button(self, text="EXIT", font="Arial 16", width=8, command=self.controller.destroy) exit_Btn.grid(row=1, column=1, padx=30, pady=5) class selectionPage(ttk.Frame): def __init__(self, parent, controller): self.controller = controller ttk.Frame.__init__(self, parent) self.teamSelect() def teamSelect(self): heading = Label(self, text="Become a member of a Team", font=('Arial', 25)) heading.grid(row=0, column=0, columnspan=2, padx=200, pady=40) teams = Button(self, text="Teams", font="Arial 24", width=15, command=lambda: self.controller.show_frame(TeamsPage)) teams.grid(row=1, column=0, padx=270, pady=5) class TeamsPage(ttk.Frame): def __init__(self, parent, controller): self.controller = controller ttk.Frame.__init__(self, parent) self.userEntry() def userEntry(self): headingTest = Label(self, text="Enter your Username:", font="Arial 20") headingTest.grid(row=0, column=0, pady=0) # Make entry an instance variable to access later self.usernameEnter = Entry(self, width=40) self.usernameEnter.grid(row=0, column=1, padx=2, pady=10) # Make team selection variable an instance variable self.UserName = StringVar(self) self.UserName.set("Team1") AdditionalText = Label(self, text="Please select a team:", font="Arial 18") AdditionalText.grid(row=1, column=0, sticky=W, pady=15) teamSelection = OptionMenu(self, self.UserName, "Team1", "Team2", "Team3", "Team 4") teamSelection.grid(row=1, column=1, sticky=W) confirmBtn = Button(self, text="Submit", font="Arial 16", command=self.add_user_to_team) confirmBtn.config(height=4, width=12) confirmBtn.grid(row=2, column=2, sticky=E, padx=65, pady=300) def add_user_to_team(self): # Get and clean up the username input username = self.usernameEnter.get().strip() if not username: print("Please enter a valid username!") return # Get selected team and its member list via mapping selected_team = self.UserName.get() target_team_list = team_mapping[selected_team] # Add username to the team's list target_team_list.append(username) print(f"Success! Added {username} to {selected_team}. Members: {target_team_list}") # Clear entry field for next input self.usernameEnter.delete(0, END) if __name__ == '__main__': app = CollegeApp() app.geometry("800x500") app.title('Points Counter') app.mainloop()
Key Changes Breakdown:
- Team Mapping Dictionary: The
team_mappingdict lets us directly link each OptionMenu option to its member list—no more clunkyif/elifchains. - Instance Variables: By using
self.usernameEnterandself.UserName, we can access the user's input and team selection from the submit function. - Submit Logic: The
add_user_to_teammethod:- Grabs and validates the username (prevents empty entries)
- Uses the mapping to find the correct member list
- Adds the username and prints a confirmation (you can replace this with a popup message if you prefer)
- Clears the entry field for convenience
Test it out: enter a username, pick a team, click Submit, and check the console to see the member lists update in real time.
内容的提问来源于stack exchange,提问作者Alexander Urum
相关产品推荐
相关产品推荐

