Apr-15-2021, 03:17 PM
(Apr-14-2021, 06:57 PM)Yoriz Wrote: I used deque to group buttons together so you can rotate the active button, and then another deque to contain the header button and the deque groups.
There is a functionstart_with_first_selected
that is set toFalse
to get the behaviour you asked for of having nothing shown as selected, to do this it means the last button of each group is the active one but not yet shown until you rotate that group for the first time.
I think I preferstart_with_first_selected
set toTrue
so the first item of each group is active to begin with.
You will probably want to play around with the formatting of the headers to make them look different from the selections.
I commented out all pygame stuff.
# Import module from collections import deque from itertools import islice from tkinter import * import tkinter # from PIL import Image, ImageTk # import keyboard # import pynput # import pygame # pygame.init() # keys = pygame.key.get_pressed() # Create object root = tkinter.Tk() # Adjust size root.geometry("640x300") root.configure(bg='black') # Specify Grid # options for grid: # MINSIZE, PAD, UNIFORM, WEIGHT Grid.rowconfigure(root, 0, weight=1, uniform='a') Grid.rowconfigure(root, 1, weight=1, uniform='b') Grid.rowconfigure(root, 2, weight=1, uniform='b') Grid.rowconfigure(root, 3, weight=1, uniform='b') Grid.rowconfigure(root, 4, weight=1, uniform='b') Grid.rowconfigure(root, 5, weight=1, uniform='b') Grid.rowconfigure(root, 6, weight=1, uniform='b') Grid.rowconfigure(root, 7, weight=1, uniform='b') Grid.rowconfigure(root, 8, weight=1, uniform='b') Grid.rowconfigure(root, 9, weight=1, uniform='b') Grid.columnconfigure(root, 0, weight=1, uniform='d') Grid.columnconfigure(root, 1, weight=1, uniform='d') Grid.columnconfigure(root, 2, weight=1, uniform='d') Grid.columnconfigure(root, 3, weight=1, uniform='d') Grid.columnconfigure(root, 4, weight=1, uniform='d') Grid.columnconfigure(root, 5, weight=1, uniform='d') Grid.columnconfigure(root, 6, weight=1, uniform='d') Grid.columnconfigure(root, 7, weight=1, uniform='d') #Grid.columnconfigure(root,4,weight=1, uniform='a') # Grid.rowconfigure(root,0,row=0,weight=0) # notes on different widget options other notes sections will be added for late rreference needs and # desired customizations. # w = Canvas (master, option-value # bd, bg, cursor, highlight color, width, height # w = CheckButton(master, option=value) # Title, activebackground, activeforeground, bg, command, font, image # w=Entry(master, option=value) # bd, bg, cursor, command, highlightcolor, width, height # w=Label(master, option=value) # bg, bd, command, font, image, width, height # w = Listbox(master, option=value) # hightlightcolor, bg, bd, font, image, width, height # w = MenuButton(master, option=value) # activebackground, activeforeground, bg, bd, cursor, image, width, height, highlightcolor # w = Scrollbar(master, option=value) # width, activebackground, bg, bd, cursor # w = Text(master, option=value) # highlightcolor, insertbackground, bg, font, image, width, height # w = tk.menu button(parent, option, ...) # activebackground, activeforeground, anchor, background or bg, cursor, compound, direction, disabledforeground, fg, font, height, highlightbackground, highlightcolor, highlightthickness, image, justify, menu, padx, pady, relief, state, takefocus, text, textvariable, underline, width, wraplength # # # # image files # photo = PhotoImage(file = r"c:\Menu_title.png") # old sentry gun menu title # Specify Framesw = Frame(master, option=value) # bg, bd, cursor, height, highlightbackground, highlightcolor, highlightthickness, relief, width # Create Buttons # master, option=value, ... # activebackground, activeforeground, bd, bg, command, fg, font, height, highlightcolor, image, justify, padx, pady, relief, state, underline, width, wraplength button_1 = Button(root, justify=CENTER, text="AUTO-REMOTE", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') button_2 = Button(root, justify=CENTER, text="HARD", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') button_3 = Button(root, justify=CENTER, text="SEMIHARD", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') button_4 = Button(root, justify=CENTER, text="SOFT", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') sbutton_1 = Button(root, justify=CENTER, text="BIO", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') sbutton_2 = Button(root, justify=CENTER, text="INERT", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') tsbutton_1 = Button(root, justify=CENTER, text="MULTI SPEC", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') tsbutton_2 = Button(root, justify=CENTER, text="INFRA RED", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') tsbutton_3 = Button(root, justify=CENTER, text="UV", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') wsbutton_1 = Button(root, justify=CENTER, text="SAFE", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') wsbutton_2 = Button(root, justify=CENTER, text="ARMED", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') isbutton_1 = Button(root, justify=CENTER, text="SEARCH", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') isbutton_2 = Button(root, justify=CENTER, text="TEST", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') isbutton_3 = Button(root, justify=CENTER, text="ENGAGED", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') isbutton_4 = Button(root, justify=CENTER, text="INTERROGATE", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') trbutton_1 = Button(root, justify=CENTER, text="AUTO", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') trbutton_2 = Button(root, justify=CENTER, text="SELECTIVE", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') smman = Button(root, justify=CENTER, text="MAN-OVERRIDE", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') smauto = Button(root, justify=CENTER, text="SEMI-AUTO", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') gun_1 = Button(root, borderwidth=7, bg='black', relief=RIDGE,disabledforeground='yellow', state=DISABLED, text="kp") gun_2 = Button(root, borderwidth=7, bg='black', fg='yellow',disabledforeground='yellow', state=DISABLED, text="kp") # header = Button(root, image = photo, compound = TOP) # image reference headernew = Button(root, bg='black', state=DISABLED, fg='yellow', disabledforeground='yellow',highlightbackground='yellow', borderwidth=2, justify=CENTER, text="UA 571-C \n REMOTE SENTRY WEAPON SYSTEM") syst = Button(root, bg='black', state=DISABLED, fg='yellow', disabledforeground='yellow',highlightbackground='yellow', borderwidth=2, justify=CENTER, text="SYSTEM \n MODE") weap = Button(root, bg='black', state=DISABLED, fg='yellow', disabledforeground='yellow',highlightbackground='yellow', borderwidth=2, justify=CENTER, text="WEAPON \n STATUS") iff = Button(root, bg='black', state=DISABLED, fg='yellow', disabledforeground='yellow',highlightbackground='yellow', borderwidth=2, justify=CENTER, text="IFF \n STATUS") test = Button(root, bg='black', state=DISABLED, fg='yellow', disabledforeground='yellow',highlightbackground='yellow', borderwidth=2, justify=CENTER, text="TEST \n ROUTINE") target = Button(root, bg='black', state=DISABLED, fg='yellow', disabledforeground='yellow',highlightbackground='yellow', borderwidth=2, justify=CENTER, text="TARGET PROFILE") spectral = Button(root, bg='black', state=DISABLED, fg='yellow', disabledforeground='yellow',highlightbackground='yellow', borderwidth=2, justify=CENTER, text="SPECTRAL PROFILE") ts = Button(root, bg='black', state=DISABLED, fg='yellow', disabledforeground='yellow',highlightbackground='yellow', borderwidth=2, justify=CENTER, text="TARGET SELECT") # bg='black', fg='yellow', highlightbackground='yellow', highlightcolor='black' # Set grid # widget.grid(grid_options) # column, columnspan, ipadx, ipady, padx, pady, row, rowspan, sticky gun_1.grid(row=0, column=0, ipadx=2, ipady=2, padx=2, pady=2, sticky=W) gun_2.grid(row=0, column=7, ipadx=2, ipady=2, padx=2, pady=2, sticky=E) headernew.grid(row=0, column=1, columnspan=6, sticky="NSEW") button_1.grid(row=2, column=0, columnspan=2, sticky="NSEW") button_2.grid(row=9, column=0, columnspan=3, sticky="NSEW") button_3.grid(row=8, column=0, columnspan=3, sticky="NSEW") button_4.grid(row=7, column=0, columnspan=3, sticky="NSEW") sbutton_1.grid(row=7, column=3, columnspan=2, sticky="NSEW") sbutton_2.grid(row=8, column=3, columnspan=2, sticky="NSEW") tsbutton_1.grid(row=7, column=5, columnspan=3, sticky="NSEW") tsbutton_2.grid(row=8, column=5, columnspan=3, sticky="NSEW") tsbutton_3.grid(row=9, column=5, columnspan=3, sticky="NSEW") wsbutton_1.grid(row=2, column=2, columnspan=2, sticky="NSEW") wsbutton_2.grid(row=3, column=2, columnspan=2, sticky="NSEW") isbutton_1.grid(row=2, column=4, columnspan=2, sticky="NSEW") isbutton_2.grid(row=3, column=4, columnspan=2, sticky="NSEW") isbutton_3.grid(row=4, column=4, columnspan=2, sticky="NSEW") isbutton_4.grid(row=5, column=4, columnspan=2, sticky="NSEW") trbutton_1.grid(row=2, column=6, columnspan=2, sticky="NSEW") trbutton_2.grid(row=3, column=6, columnspan=2, sticky="NSEW") smman.grid(row=3, column=0, columnspan=2, sticky="NSEW") smauto.grid(row=4, column=0, columnspan=2, sticky="NSEW") syst.grid(row=1, column=0, columnspan=2, sticky="NSEW") weap.grid(row=1, column=2, columnspan=2, sticky="NSEW") iff.grid(row=1, column=4, columnspan=2, sticky="NSEW") test.grid(row=1, column=6, columnspan=2, sticky="NSEW") target.grid(row=6, column=0, columnspan=3, sticky="NSEW") spectral.grid(row=6, column=3, columnspan=2, sticky="NSEW") ts.grid(row=6, column=5, columnspan=3, sticky="NSEW") group1 = deque((button_1, smman, smauto)) group2 = deque((wsbutton_1, wsbutton_2)) group3 = deque((isbutton_1, isbutton_2, isbutton_3, isbutton_4)) group4 = deque((trbutton_1, trbutton_2)) group5 = deque((button_4, button_3, button_2)) group6 = deque((sbutton_1, sbutton_2)) group7 = deque((tsbutton_1, tsbutton_2, tsbutton_3)) header_group = deque(((syst, group1), (weap, group2), (iff, group3), (test, group4), (target, group5), (spectral, group6), (ts, group7))) def toggle_button_group(button_group): button_group[0].config( foreground='black', background='yellow', relief='sunken') for button in islice(button_group, 1, None): button.config(foreground='yellow', background='black', relief='raised') def toggle_header_group(header_group): header_group[0][0].config( disabledforeground='black', background='yellow', relief='sunken') for button in islice(header_group, 1, None): button[0].config(disabledforeground='yellow', background='black', relief='raised') def start_with_first_selected(first_selected=False): if first_selected: toggle_button_group(group1) toggle_button_group(group2) toggle_button_group(group3) toggle_button_group(group4) toggle_button_group(group5) toggle_button_group(group6) toggle_button_group(group7) else: # set last of each group to selected group1.rotate(1) group2.rotate(1) group3.rotate(1) group4.rotate(1) group5.rotate(1) group6.rotate(1) group7.rotate(1) start_with_first_selected(False) toggle_header_group(header_group) def on_down(event): group = header_group[0][1] group.rotate(-1) toggle_button_group(group) def on_up(event): group = header_group[0][1] group.rotate(1) toggle_button_group(group) def on_left(event): header_group.rotate(1) toggle_header_group(header_group) def on_right(event): header_group.rotate(-1) toggle_header_group(header_group) root.bind('<Down>', on_down) root.bind('<Up>', on_up) root.bind('<Left>', on_left) root.bind('<Right>', on_right) # while True: # # Execute tkinter root.mainloop() # for event in pygame.event.get(): # if event.type == pygame.KEYDOWN: # if event.key == pygame.K_q: # pygame.quit() # sys.exit(0) # quit() # break # if keys[pygame.K_w]: # break
Thanks! I will give that a go this weekend. Your help is greatly appreciated. The more I do this stuff the more I learn.