список отображения на основе выбора нескольких переключателей с использованием Python Tkinter - PullRequest
0 голосов
/ 10 июля 2020

Я абсолютный новичок в программировании и до 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()

Random List Button Selections Пример использования

1 Ответ

1 голос
/ 10 июля 2020

Лучше обновлять список выбора инженеров всякий раз, когда изменяется форум или группа инженеров, и тогда кнопка Display Selection не требуется.

Также лучше создать окно выбора инженера и обновлять его содержимое всякий раз, когда требуется вместо создания нового при изменении форума или группы инженеров. То же самое и для окна, выбранного ведущим инженером.

Ниже приведен модифицированный и упрощенный пример:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...