Apr-19-2021, 12:04 AM
(This post was last modified: Apr-19-2021, 12:05 AM by knoxvilles_joker.
Edit Reason: blocking was not working.
)
I have added sound to the menu clicks.
import tkinter as tk from tkinter import * #import PIL.ImageTk #import image #import PIL #import PIL.Image import tkinter.ttk as ttk import datetime as dt import time import os from tkinter import messagebox from collections import deque from itertools import islice from threading import Thread from playsound import playsound # # global variables will be declared here GUN = "" # end global variables section # # This is the initial screen that loads and then disappears after 8 seconds # I used 3 images to make the main deal. The issue was that pygame allowed for line draws # tkinter only allows for drawing of boxes. # should this change I will change from using images. class SplashFrame(tk.Toplevel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.geometry('640x400') self.title("Iniitaling") self.img = tk.PhotoImage(file='load5.png') self.configure(background='black') self.overrideredirect(True) tk.Grid.rowconfigure(self, 0, weight=1, uniform='a') tk.Grid.columnconfigure(self, 0, weight=1, uniform='a') tk.Grid.rowconfigure(self, 1, weight=1, uniform='a') tk.Grid.rowconfigure(self, 2, weight=1, uniform='a') tk.Grid.columnconfigure(self, 1, weight=1, uniform='a') tk.Grid.columnconfigure(self, 2, weight=1, uniform='a') self.leftimage = PhotoImage(file='loadleft22.png') left = ttk.Label(self, style="TLabel", image=self.leftimage) left.grid(row=2, column=0, sticky="NSEW") self.rightimage = PhotoImage(file='loadright3.png') right = ttk.Label(self, style="TLabel", image=self.rightimage) right.grid(row=2, column=2, sticky="NSEW") btn = tk.Label(self, image=self.img) btn.grid(row=0, rowspan=2, column=0, columnspan=3, sticky="NSEW") styled = ttk.Style() styled.theme_use('clam') styled.configure("TLabel", background='black', darkcolor='black', bordercolor='black', relief='none', lightcolor='black', highlightcolor='black', foreground='black', shiftrelief=-5, highlightthickness=0, width=0, anchor="NSEW") styled.configure("Horizontal.TProgressbar", foreground = 'black', background = 'yellow', bordercolor='black', darkcolor='black', throughcolor='black', lightcolor='black') loadingbar = ttk.Progressbar(self, style="Horizontal.TProgressbar", orient="horizontal", length = 200, mode='indeterminate', maximum=100) loadingbar.grid(row=2, column=1, sticky="NEW") loadingbar.start([78]) self.overrideredirect(True) # self.after has a timer in msecs. Just change this to your desired value. I have logic on loading bar set for 8 seconds so if you change that # you will need to adjust the loadingbar.start number. Remember it is 200 units long and you divide that by the time in msecs to figure out how to divide up the movement self.after(1000, self.destroy) # # End of splash screen defined class and related functions # #------------begin select screen------------------------------ # Begin select menu defined class and related functions # This is the script's core window so more code will be present here than in other sections # # This is the next screen to load after the initial splash screen class TkApp(tk.Tk): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.geometry('640x400') self.title("Select Screen") self.configure(bg='black') self.gun = tk.StringVar() self.gun.set(GUN) # Specify Grid tk.Grid.rowconfigure(self, 0, weight=1, uniform='a') tk.Grid.rowconfigure(self, 1, weight=1, uniform='b') tk.Grid.rowconfigure(self, 2, weight=1, uniform='b') tk.Grid.rowconfigure(self, 3, weight=1, uniform='b') tk.Grid.rowconfigure(self, 4, weight=1, uniform='b') tk.Grid.rowconfigure(self, 5, weight=1, uniform='b') tk.Grid.rowconfigure(self, 6, weight=1, uniform='b') tk.Grid.rowconfigure(self, 7, weight=1, uniform='b') tk.Grid.rowconfigure(self, 8, weight=1, uniform='b') tk.Grid.rowconfigure(self, 9, weight=1, uniform='b') tk.Grid.columnconfigure(self, 0, weight=1, uniform='d') tk.Grid.columnconfigure(self, 1, weight=1, uniform='d') tk.Grid.columnconfigure(self, 2, weight=1, uniform='d') tk.Grid.columnconfigure(self, 3, weight=1, uniform='d') tk.Grid.columnconfigure(self, 4, weight=1, uniform='d') tk.Grid.columnconfigure(self, 5, weight=1, uniform='d') tk.Grid.columnconfigure(self, 6, weight=1, uniform='d') tk.Grid.columnconfigure(self, 7, weight=1, uniform='d') button_1 = tk.Button(self, justify=tk.CENTER, text="AUTO-REMOTE", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') button_2 = tk.Button(self, justify=tk.CENTER, text="HARD", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') button_3 = tk.Button(self, justify=tk.CENTER, text="SEMIHARD", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') button_4 = tk.Button(self, justify=tk.CENTER, text="SOFT", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') sbutton_1 = tk.Button(self, justify=tk.CENTER, text="BIO", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') sbutton_2 = tk.Button(self, justify=tk.CENTER, text="INERT", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') tsbutton_1 = tk.Button(self, justify=tk.CENTER, text="MULTI SPEC", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') tsbutton_2 = tk.Button(self, justify=tk.CENTER, text="INFRA RED", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') tsbutton_3 = tk.Button(self, justify=tk.CENTER, text="UV", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') wsbutton_1 = tk.Button(self, justify=tk.CENTER, text="SAFE", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') wsbutton_2 = tk.Button(self, justify=tk.CENTER, text="ARMED", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') isbutton_1 = tk.Button(self, justify=tk.CENTER, text="SEARCH", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') isbutton_2 = tk.Button(self, justify=tk.CENTER, text="TEST", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') isbutton_3 = tk.Button(self, justify=tk.CENTER, text="ENGAGED", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') isbutton_4 = tk.Button(self, justify=tk.CENTER, text="INTERROGATE", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') trbutton_1 = tk.Button(self, justify=tk.CENTER, text="AUTO", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') trbutton_2 = tk.Button(self, justify=tk.CENTER, text="SELECTIVE", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') smman = tk.Button(self, justify=tk.CENTER, text="MAN-OVERRIDE", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') smauto = tk.Button(self, justify=tk.CENTER, text="SEMI-AUTO", bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') # displays gun id on top left and right of screen gun_1 = tk.Button(self, borderwidth=7,bg='black',fg='yellow',disabledforeground='yellow',state=tk.DISABLED,textvariable=self.gun, highlightcolor = 'yellow') gun_2 = tk.Button(self, borderwidth=7,bg='black',fg='yellow',disabledforeground='yellow',state=tk.DISABLED,textvariable=self.gun) headernew = tk.Button(self, bg='black', state=tk.DISABLED, fg='yellow', disabledforeground='yellow',highlightbackground='yellow', borderwidth=2, justify=CENTER, text="UA 571-C \n REMOTE SENTRY WEAPON SYSTEM") syst = tk.Button(self, bg='black', state=tk.DISABLED, fg='yellow', disabledforeground='yellow',highlightbackground='yellow', borderwidth=2, justify=CENTER, text="SYSTEM \n MODE") weap = tk.Button(self, bg='black', state=tk.DISABLED, fg='yellow', disabledforeground='yellow',highlightbackground='yellow', borderwidth=2, justify=CENTER, text="WEAPON \n STATUS") iff = tk.Button(self, bg='black', state=tk.DISABLED, fg='yellow', disabledforeground='yellow',highlightbackground='yellow', borderwidth=2, justify=CENTER, text="IFF \n STATUS") test = tk.Button(self, bg='black', state=tk.DISABLED, fg='yellow', disabledforeground='yellow',highlightbackground='yellow', borderwidth=2, justify=CENTER, text="TEST \n ROUTINE") target = tk.Button(self, bg='black', state=tk.DISABLED, fg='yellow', disabledforeground='yellow',highlightbackground='yellow', borderwidth=2, justify=CENTER, text="TARGET PROFILE") spectral = tk.Button(self, bg='black', state=tk.DISABLED, fg='yellow', disabledforeground='yellow',highlightbackground='yellow', borderwidth=2, justify=CENTER, text="SPECTRAL PROFILE") ts = tk.Button(self, bg='black', state=tk.DISABLED, fg='yellow', disabledforeground='yellow',highlightbackground='yellow', borderwidth=2, justify=CENTER, text="TARGET SELECT") 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") # this quits by clicking a button labeled q quit = tk.Button(self, bg='black', fg='yellow', text='q', command=self.quit) quit.grid(row=8,column=0,sticky="SW") self.bind('<KeyPress-Down>', self.on_down) self.bind("<Up>", self.on_up) self.bind("<Left>", self.on_left) self.bind("<Right>", self.on_right) self.bind("<KeyPress-a>", self.on_keypress_a) self.bind("<KeyPress-b>", self.on_keypress_b) self.bind("<KeyPress-c>", self.on_keypress_c) self.bind("<KeyPress-d>", self.on_keypress_d) self.bind("<KeyPress-q>", self.on_keypress_q) tk.Button(self, text='SecondFrame', command=self.on_button, bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow').grid(row=9, column=0, sticky="SW") self.create_splashframe() # These are the bind key definitions self.bind("<KeyPress-r>", self.on_keypress_r) self.bind("<KeyPress-space>", self.on_keypress_space) self.bind("<KeyPress-k>", self.on_keypress_k) self.group1 = deque((button_1, smman, smauto)) self.group2 = deque((wsbutton_1, wsbutton_2)) self.group3 = deque((isbutton_1, isbutton_2, isbutton_3, isbutton_4)) self.group4 = deque((trbutton_1, trbutton_2)) self.group5 = deque((button_4, button_3, button_2)) self.group6 = deque((sbutton_1, sbutton_2)) self.group7 = deque((tsbutton_1, tsbutton_2, tsbutton_3)) self.header_group = deque(((syst, self.group1), (weap, self.group2),(iff, self.group3), (test, self.group4),(target, self.group5), (spectral, self.group6),(ts, self.group7))) self.start_with_first_selected(False) self.toggle_header_group(self.header_group) def toggle_button_group(self, 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(self, header_group): header_group[0][0].config(disabledforeground='black', background='yellow', relief='sunken') for button in islice(self.header_group, 1, None): button[0].config(disabledforeground='yellow',background='black', relief='raised') def start_with_first_selected(self, first_selected=False): if first_selected: toggle_button_group(self.group1) toggle_button_group(self.group2) toggle_button_group(self.group3) toggle_button_group(self.group4) toggle_button_group(self.group5) toggle_button_group(self.group6) toggle_button_group(self.group7) else: # set last of each group to selected self.group1.rotate(1) self.group2.rotate(1) self.group3.rotate(1) self.group4.rotate(1) self.group5.rotate(1) self.group6.rotate(1) self.group7.rotate(1) def on_down(self, evet): group = self.header_group[0][1] group.rotate(-1) self.toggle_button_group(group) playsound("click1.mp3") def on_up(self, evet): group = self.header_group[0][1] group.rotate(1) self.toggle_button_group(group) playsound("click1.mp3") def on_left(self, evet): self.header_group.rotate(1) self.toggle_header_group(self.header_group) playsound("click1.mp3") def on_right(self, evet): self.header_group.rotate(-1) self.toggle_header_group(self.header_group) playsound("click1.mp3") # this appears to launch the initial window def create_splashframe(self): splashframe = SplashFrame(self) self.withdraw() self.wait_window(splashframe) self.deiconify() # this launches the next screen, the fire select screen def on_button(self): secondframe = SecondFrame(self) self.withdraw() self.wait_window(secondframe) self.deiconify() def kudos(self): kudosframe = KudosFrame(self) self.withdraw() self.wait_window(kudosframe) self.deiconify() def on_keypress_k(self, evet): print("k pressed") self.kudos() playsound("click1.mp3") # these work def on_keypress_a(self, evet): which_gun = self.gun.get() which_gun = "A" self.gun.set(which_gun) playsound("click1.mp3") def on_keypress_b(self, evet): which_gun = self.gun.get() which_gun = "B" self.gun.set(which_gun) playsound("click1.mp3") def on_keypress_c(self, evet): which_gun = self.gun.get() which_gun = "C" self.gun.set(which_gun) playsound("click1.mp3") def on_keypress_d(self, evet): which_gun = self.gun.get() which_gun = "D" self.gun.set(which_gun) playsound("click1.mp3") # this launches you to window three, the fire select window def on_keypress_space(self, evet): print("space pressed") self.on_button() playsound("click1.mp3") # this quits and closes the window by hitting a single key def on_keypress_q(self, evet): self.quit() playsound("click1.mp3") # this reloads the game, you have to click it to make it the active window again def on_keypress_r(self, evet): self.destroy() self.__init__() playsound("click1.mp3") # # # # # this is the third fire screen class SecondFrame(tk.Toplevel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.geometry('640x400') self.title("Fire status screen") tk.Grid.rowconfigure(self, 0, weight=1, uniform='a') tk.Grid.columnconfigure(self, 0, weight=1, uniform='a') tk.Button(self, text='Close', command=self.destroy).grid(row=0, column=0, sticky="NSEW") # These are the bind key definitions self.bind("<KeyPress-r>", self.on_keypress_r) self.bind("<KeyPress-q>", self.on_keypress_q) self.bind("<KeyPress-space>", self.on_keypress_space) self.bind("<KeyPress-k>", self.on_keypress_k) # this appears to launch the initial window def create_splashframe(self): splashframe = SplashFrame(self) self.withdraw() self.wait_window(splashframe) self.deiconify() # this launches the next screen, the fire select screen def on_button(self): secondframe = SecondFrame(self) self.withdraw() self.wait_window(secondframe) self.deiconify() def kudos(self): kudosframe = KudosFrame(self) self.withdraw() self.wait_window(kudosframe) self.deiconify() def on_keypress_k(self, evet): print("k pressed") self.kudos() playsound("click1.mp3") # this reloads the game, you have to click it to make it the active window again def on_keypress_r(self, evet): self.destroy() self.create_splashframe playsound("click1.mp3") # this launches you to window three, the fire select window def on_keypress_space(self, evet): print("space pressed") self.on_button() playsound("click1.mp3") # this quits and closes the window by hitting a single key def on_keypress_q(self, evet): self.destroy() self.quit() playsound("click1.mp3") # # # End fire menu class and related functions # # #Begin secret credits(kudos) screen # # class KudosFrame(tk.Toplevel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.geometry('640x400') self.title("Secret credits screen") tk.Grid.rowconfigure(self, 0, weight=1, uniform='a') tk.Grid.columnconfigure(self, 0, weight=1, uniform='a') tk.Grid.rowconfigure(self, 1, weight=1, uniform='a') tk.Grid.columnconfigure(self, 1, weight=1, uniform='a') r0c0 = tk.Button(self, text='Close', command=self.destroy, bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') r0c0.grid(row=0, column=0, sticky="NSEW") r1c0 = tk.Label(self, text ='Alienslegacy.com Credits \n knoxvilles_joker aka gabriel vos new script \n martinr1000 font and some coding help \n MLR 2007 for original flash script \n Facebook.com theuscm \n youtube.com/channel/UC4KYYScA5WcdCZeiU6lcjdA \n cobra_shipwreck channel aka knoxvilles_joker', bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') r1c0.grid(row=1, column=0, sticky="NSEW") r1c1 = tk.Label(self, text =' ', bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') r1c1.grid(row=1, column=1, sticky="NSEW") r0c1 = tk.Label(self, text ='Python-forum.io credits \n Yoriz coding pointers and help \n ndc85430 coding critique \n ', bg='black', fg='yellow',highlightbackground='yellow', highlightcolor='black', activebackground='yellow') r0c1.grid(row=0, column=1, sticky="NSEW") # These are the bind key definitions self.bind("<KeyPress-r>", self.on_keypress_r) self.bind("<KeyPress-space>", self.on_keypress_space) self.bind("<KeyPress-k>", self.on_keypress_k) self.bind("<KeyPress-q>", self.on_keypress_q) def on_button(self): secondframe = SecondFrame(self) self.withdraw() self.wait_window(secondframe) self.deiconify() def kudos(self): kudosframe = KudosFrame(self) self.withdraw() self.wait_window(kudosframe) self.deiconify() # this appears to launch the initial window def create_splashframe(self): splashframe = SplashFrame(self) self.withdraw() self.wait_window(splashframe) self.deiconify() # this reloads the game, you have to click it to make it the active window again def on_keypress_r(self, evet): self.destroy() self.create_splashframe # this appears to launch the initial window def create_splashframe(self): splashframe = SplashFrame(self) self.withdraw() self.wait_window(splashframe) self.deiconify() def on_keypress_k(self, evet): print("k pressed") self.kudos() playsound("click1.mp3") # this launches you to window three, the fire select window def on_keypress_space(self, evet): print("space pressed") self.on_button() playsound("click1.mp3") # this quits and closes the window by hitting a single key def on_keypress_q(self, evet): self.destroy() self.quit() playsound("click1.mp3") # # End secret credits(kudos) screen # # # # The below two commands run the entire script # tk_app = TkApp() tk_app.mainloop()