You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:如何将OptionMenu选项与成员列表关联并实现用户名存入对应列表

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 userEntry method, 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:

  1. Team Mapping Dictionary: The team_mapping dict lets us directly link each OptionMenu option to its member list—no more clunky if/elif chains.
  2. Instance Variables: By using self.usernameEnter and self.UserName, we can access the user's input and team selection from the submit function.
  3. Submit Logic: The add_user_to_team method:
    • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 10:22:43