Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用Python Tkinter基于多个单选按钮选择显示列表_Python 3.x_Tkinter - Fatal编程技术网

Python 3.x 使用Python Tkinter基于多个单选按钮选择显示列表

Python 3.x 使用Python Tkinter基于多个单选按钮选择显示列表,python-3.x,tkinter,Python 3.x,Tkinter,我是编程和Python的绝对初学者。我正在尝试创建一个随机会议主持人演示者,使用Tkinter主持每周会议 到目前为止,我所做的就是: 您可以单击任何单选按钮,您将看到每个按钮的用户列表 您可以单击选择主机按钮,它将从包含所有用户的列表中随机选择一个用户 问题: 我希望能够从左侧选择一个按钮(例如安全论坛)和从右侧选择一个按钮(例如初级工程师),然后单击“显示选择按钮”显示结果。它必须只保留一个条目并删除重复条目。基本上,显示多个按钮选择的结果(名称列表) from tkinter import

我是编程和Python的绝对初学者。我正在尝试创建一个随机会议主持人演示者,使用Tkinter主持每周会议

到目前为止,我所做的就是:

  • 您可以单击任何单选按钮,您将看到每个按钮的用户列表
  • 您可以单击选择主机按钮,它将从包含所有用户的列表中随机选择一个用户
  • 问题: 我希望能够从左侧选择一个按钮(例如安全论坛)和从右侧选择一个按钮(例如初级工程师),然后单击“显示选择按钮”显示结果。它必须只保留一个条目并删除重复条目。基本上,显示多个按钮选择的结果(名称列表)

    from tkinter import *
    import random
    import sys
    import datetime
    
    root = Tk()
    root.title('Random User Entry')
    root.geometry("700x600")
    root.configure(borderwidth="1")
    root.configure(relief="sunken")
    root.configure(cursor="arrow")
    root.configure(highlightbackground="white")
    root.configure(highlightcolor="black")
    
    # f = forum, e = engineers
    f = IntVar()
    e = IntVar()
    
    security = ['Raven Kyle', 'Billy Joel','James Gonzalez','Maria Lopez', 'Justin Bright', 'Ali Baba']
    networkcore = ['Tom Reeves', 'Joe Soap', 'John Smith', 'David Jones','Michael Johnson','Chris Lee']
    unifiedcomms = ['Mary White', 'John Smith','Mike Brown','Mark Williams','Paul Rodriguez','Daniel Garcia']
    
    # un = username | eng = engineer
    junior_eng_un = ['Raven Kyle', 'Billy Joel','James Gonzalez','Maria Lopez', 'Justin Bright', 'Ali Baba','Tom Reeves',
                 'Joe Soap', 'John Smith']
    senior_eng_un = ['David Jones','Michael Johnson','Chris Lee','Mary White', 'John Smith','Mike Brown','Mark Williams',
                 'Paul Rodriguez','Daniel Garcia']
    all_eng_un = ['Raven Kyle', 'Billy Joel','James Gonzalez','Maria Lopez', 'Justin Bright', 'Ali Baba','Tom Reeves',
                  'Joe Soap', 'John Smith', 'David Jones','Michael Johnson','Chris Lee','Mary White', 'John Smith',
                  'Mike Brown','Mark Williams','Paul Rodriguez','Daniel Garcia']
    
    
    def tick():
        datenow = datetime.datetime.now()
        time_string = datenow.strftime("%d-%m-%Y %H:%M:%S:%p")
        clock.config(text=time_string)
        clock.after(200,tick)
    
    
    clock = Label(root, font=("times", 12, "bold"), fg= "white", bg="black")
    clock.grid(row=6, columnspan=1, pady=3)
    tick()
    
    
    def all_eng_host():
        # all engineering host - random selection of list all_eng_un, enter result in blue textbox
        un_in_numbers = len(all_eng_un) - 1
        rand_un = random.randint(0, un_in_numbers)
        selection_display = Text(master=root, height=17, width=20, bg="Lightblue", font="Helvetica 12 bold")
        selection_display.grid(row=5, column=0, padx=10)
        selection_display.insert(END, all_eng_un[rand_un])
    
    
    def all_eng_display():
        # Selecting ALL Engineers and display in green box
        all_eng_display = Text( master=root, height=20, width=20, bg="Lightgreen", font ="Helvetica 10 bold" )
        all_eng_display.grid(row=5,column=1,padx=10)
        for i in all_eng_un:
            all_eng_display.insert(END, (i + "\n"))
    
    
    def junior_eng_display():
        # Selecting only SA Engineers and display in green box
        junior_eng_display = Text( master=root, height=20, width=20, bg="Lightgreen", font ="Helvetica 10 bold" )
        junior_eng_display.grid(row=5,column=1,padx=10)
        for i in junior_eng_un:
            junior_eng_display.insert(END, (i + "\n"))
    
    
    def senior_eng_display():
        # Selecting only UK Engineers and display in green box
        senior_eng_display = Text( master=root, height=20, width=20, bg="Lightgreen", font ="Helvetica 10 bold" )
        senior_eng_display.grid(row=5,column=1,padx=10)
        for i in senior_eng_un:
            senior_eng_display.insert(END, (i + "\n"))
    
    
    def rs_forum_display():
        # Selecting only users part of networkcore forum and display in green box
        rs_forum_display = Text( master=root, height=20, width=20, bg="Lightgreen", font ="Helvetica 10 bold" )
        rs_forum_display.grid(row=5,column=1,padx=10)
        for i in networkcore:
            rs_forum_display.insert(END, (i + "\n"))
    
    
    def sec_forum_display():
        # Selecting only users part of security forum and display in green box
        sec_forum_display = Text( master=root, height=20, width=20, bg="Lightgreen", font ="Helvetica 10 bold" )
        sec_forum_display.grid(row=5,column=1,padx=10)
        for i in security:
            sec_forum_display.insert(END, (i + "\n"))
    
    
    def uc_forum_display():
        # Selecting only users part of unifiedcomms forum and display in green box
        uc_forum_display = Text( master=root, height=20, width=20, bg="Lightgreen", font ="Helvetica 10 bold" )
        uc_forum_display.grid(row=5,column=1,padx=10)
        for i in unifiedcomms:
            uc_forum_display.insert(END, (i + "\n"))
    
    
    def show_selection():
        for pa in security:
            security_display = Text(master=root, height=20, width=20, bg="Lightgreen", font="Helvetica 10 bold")
            security_display.grid(row=5, column=1, padx=10)
            security_display.insert(END, pa)
        for rs in networkcore:
            networkcore_display = Text(master=root, height=20, width=20, bg="Lightgreen", font="Helvetica 10 bold")
            networkcore_display.grid(row=5, column=1, padx=10)
            networkcore_display.insert(END, (rs + "\n"))
            for uc in unifiedcomms:
                unifiedcomms_display = Text(master=root, height=20, width=20, bg="Lightgreen", font="Helvetica 10 bold")
                unifiedcomms_display.grid(row=5, column=1, padx=10)
                unifiedcomms_display.insert(END, (uc + "\n"))
    
    
    def none_selected():
        # Display message if no options selected
        greeting1 = " "
        security_display = Text(master=root, height=20, width=20, bg="Lightgreen", font="Helvetica 10 bold")
        security_display.grid(row=5, column=1, padx=10)
        security_display.insert(END, greeting1)
    
    
    
    topLabel = Label(root, text="GNC Random Meeting Host Selector", font=("Helvetica", 20))
    topLabel.grid(row=0, columnspan=2, pady=5, padx=20)
    
    myradiobutton1 = Radiobutton(root, text="Routing and Switching Forum", font=("Helvetica", 12),
                                 variable=f, value=networkcore, command=rs_forum_display)
    myradiobutton1.grid(row=1, column=0, sticky=W)
    myradiobutton2 = Radiobutton(root, text="Security Forum", font=("Helvetica", 12),
                                 variable=f, value=security, command=sec_forum_display)
    myradiobutton2.grid(row=2, column=0, sticky=W)
    myradiobutton3 = Radiobutton(root, text="Unified Comms Forum", font=("Helvetica", 12),
                                 variable=f, value=unifiedcomms, command=uc_forum_display)
    myradiobutton3.grid(row=3, column=0, sticky=W)
    
    Radiobutton(root, text="Junior Engineers", font=("Helvetica", 12), variable=e, value=junior_eng_un, command=junior_eng_display).grid(row=1, column=1)
    Radiobutton(root, text="Senior Engineers", font=("Helvetica", 12), variable=e, value=senior_eng_un, command=senior_eng_display).grid(row=2, column=1)
    Radiobutton(root, text="All Engineers", font=("Helvetica", 12), variable=e, value=all_eng_un, command=all_eng_display).grid(row=3, column=1)
    
    selection_button1 = Button(root, text="Click Here to Display Selection", command=none_selected)
    selection_button1.grid(row=4, column=1, pady=10, padx=100)
    
    hostButton = Button(root, text="Click to select next Meeting Host!", font=("Helvetica", 10), command=all_eng_host)
    hostButton.grid(row=4, column=0, padx=10)
    
    root.mainloop()
    

    无论何时更改论坛或工程师组,最好更新工程师选择列表,然后不需要使用
    显示选择按钮

    此外,最好创建工程师选择框,并在需要时更新其内容,而不是在论坛或工程师组更改时创建新框。主机工程师选择的框也是如此

    下面是一个经过修改和简化的示例:

    from tkinter import *
    import random
    import sys
    import datetime
    
    root = Tk()
    root.title('Random User Entry')
    root.geometry("700x600")
    root.configure(borderwidth="1")
    root.configure(relief="sunken")
    root.configure(cursor="arrow")
    root.configure(highlightbackground="white")
    root.configure(highlightcolor="black")
    
    # f = forum, e = engineers
    f = IntVar()
    e = IntVar()
    
    networkcore = ['Tom Reeves', 'Joe Soap', 'John Smith', 'David Jones','Michael Johnson','Chris Lee']
    security = ['Raven Kyle', 'Billy Joel','James Gonzalez','Maria Lopez', 'Justin Bright', 'Ali Baba']
    unifiedcomms = ['Mary White', 'John Smith','Mike Brown','Mark Williams','Paul Rodriguez','Daniel Garcia']
    
    # un = username | eng = engineer
    junior_eng_un = ['Raven Kyle', 'Billy Joel','James Gonzalez','Maria Lopez', 'Justin Bright', 'Ali Baba','Tom Reeves',
                     'Joe Soap', 'John Smith']
    senior_eng_un = ['David Jones','Michael Johnson','Chris Lee','Mary White', 'John Smith','Mike Brown','Mark Williams',
                     'Paul Rodriguez','Daniel Garcia']
    
    def tick():
        datenow = datetime.datetime.now()
        time_string = datenow.strftime("%d-%m-%Y %H:%M:%S:%p")
        clock.config(text=time_string)
        clock.after(200,tick)
    
    clock = Label(root, font=("times", 12, "bold"), fg= "white", bg="black")
    clock.grid(row=6, columnspan=1, pady=3)
    tick()
    
    
    def update_engineer_list():
        forum = f.get()
        engineer_group = e.get()
        if forum and engineer_group:
            # both forum and engineer group are selected
            forum_engineers = networkcore if forum == 1 else security if forum == 2 else unifiedcomms
            # get available engineers for the selected forum
            if engineer_group == 1: # junior
                engineers = [engineer for engineer in junior_eng_un if engineer in forum_engineers]
            elif engineer_group == 2: # senior
                engineers = [engineer for engineer in senior_eng_un if engineer in forum_engineers]
            elif engineer_group == 3: # all
                engineers = forum_engineers
            # update engineer list
            engineer_list.config(state=NORMAL)
            engineer_list.delete(1.0, END)
            engineer_list.insert(END, "\n".join(sorted(engineers)))
            engineer_list.config(state=DISABLED)
            # clear host engineer
            host_engineer["text"] = ""
    
    
    def choose_host():
        # extract the engineer list from the engineer selection box
        engineers = engineer_list.get(1.0, "end-1c").split("\n")
        # then select one of them randomly
        host_engineer["text"] = random.choice(engineers)
    
    
    topLabel = Label(root, text="GNC Random Meeting Host Selector", font="Helvetica 20")
    topLabel.grid(row=0, columnspan=2, pady=5, padx=20)
    
    fb1 = Radiobutton(root, text="Routing and Switching Forum", font="Helvetica 12", variable=f, value=1, command=update_engineer_list)
    fb1.grid(row=1, column=0, padx=10, sticky=W)
    fb2 = Radiobutton(root, text="Security Forum", font="Helvetica 12", variable=f, value=2, command=update_engineer_list)
    fb2.grid(row=2, column=0, padx=10, sticky=W)
    fb3 = Radiobutton(root, text="Unified Comms Forum", font="Helvetica 12", variable=f, value=3, command=update_engineer_list)
    fb3.grid(row=3, column=0, padx=10, sticky=W)
    
    eb1 = Radiobutton(root, text="Junior Engineers", font="Helvetica 12", variable=e, value=1, command=update_engineer_list)
    eb1.grid(row=1, column=1, padx=10, sticky=W)
    eb2 = Radiobutton(root, text="Senior Engineers", font="Helvetica 12", variable=e, value=2, command=update_engineer_list)
    eb2.grid(row=2, column=1, padx=10, sticky=W)
    eb3 = Radiobutton(root, text="All Engineers", font="Helvetica 12", variable=e, value=3, command=update_engineer_list)
    eb3.grid(row=3, column=1, padx=10, sticky=W)
    
    hostButton = Button(root, text="Click to select next Meeting Host!", font="Helvetica 10", command=choose_host)
    hostButton.grid(row=4, column=0, padx=10, sticky=W)
    
    # engineer list for selection
    engineer_list = Text(root, width=30, height=20, bg="lightgreen", font="Helvetica 10 bold", state=DISABLED)
    engineer_list.grid(row=5, column=1, padx=10, sticky=W)
    
    # host engineer chosen
    host_engineer = Label(root, width=20, height=2, bg="lightblue", font="Helvetica 14 bold", bd=2, relief=SUNKEN)
    host_engineer.grid(row=5, column=0, padx=10, sticky=NW)
    
    root.mainloop()
    

    您的意思是不想在单击这些单选按钮时更新绿色文本框吗?谢谢您的回复@acw1668。对当我从左侧和右侧选择一个选项时,它必须通过单击“显示选择按钮”更新绿色框。我不确定复选框是否是一个更好的选择,但我希望您能理解。因此,当您更改论坛选择或工程师组选择,但不要单击
    显示选择
    按钮并单击
    会议主机
    按钮时,您希望看到什么?在这种情况下,绿色框中的工程师列表没有用于选择会议主持人的更新列表。因此,我建议在论坛或工程师组更改时更新绿色框(同时清除已选择的会议主持人),这样就可以删除
    显示选择
    按钮。因此,在论坛中,可以有初级或高级工程师。假设我想在显示框中列出高级安全工程师的结果,我将单击Radiobutton Security按钮和Radiobutton Senior Engineers按钮,结果将显示出来。请看我案例研究的图片,它将解释我试图取得更好的成绩您好@acw1668,很抱歉反应太晚。我有两天没编码了。。。。。哈哈,非常感谢你。我尝试了代码,它看起来简单多了。我真的很感谢你的帮助和道歉,为许多信息试图解决我的情况。