Python 3.x 使用Python Tkinter基于多个单选按钮选择显示列表
我是编程和Python的绝对初学者。我正在尝试创建一个随机会议主持人演示者,使用Tkinter主持每周会议 到目前为止,我所做的就是:Python 3.x 使用Python Tkinter基于多个单选按钮选择显示列表,python-3.x,tkinter,Python 3.x,Tkinter,我是编程和Python的绝对初学者。我正在尝试创建一个随机会议主持人演示者,使用Tkinter主持每周会议 到目前为止,我所做的就是: 您可以单击任何单选按钮,您将看到每个按钮的用户列表 您可以单击选择主机按钮,它将从包含所有用户的列表中随机选择一个用户 问题: 我希望能够从左侧选择一个按钮(例如安全论坛)和从右侧选择一个按钮(例如初级工程师),然后单击“显示选择按钮”显示结果。它必须只保留一个条目并删除重复条目。基本上,显示多个按钮选择的结果(名称列表) from tkinter import
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,很抱歉反应太晚。我有两天没编码了。。。。。哈哈,非常感谢你。我尝试了代码,它看起来简单多了。我真的很感谢你的帮助和道歉,为许多信息试图解决我的情况。