我想让它检测当我关闭其他菜单并重新打开这个tkinter菜单



这是我正在使用的代码,如果有建议,我会很乐意接受。我希望root在我关闭lvls_menu.menu()后重新打开。我试过一个循环导入,但它没有工作,所以请启发2个脑细胞。

root = Tk()
root.geometry("700x600")
root.title("*The Stargazers* (MAIN MENU)")
icon = PhotoImage(file = "C:\Users\LENOVO\Desktop\Adeeb\pythonProjects\ALT project\LOGO.png")
root.iconphoto(False, icon)

# background for the menu cause it needs to look nice
background = PhotoImage(file = "C:\Users\LENOVO\Desktop\Adeeb\pythonProjects\ALT project\bg1.png")
# canvas so it looks pretty
canvas1 = Canvas(root, width=700, height=600, cursor='plus')
canvas1.place(anchor='nw')
# lets draw our background
canvas1.create_image( 0, 0, image = background, anchor = "nw")

# All the prompts
main_menu = canvas1.create_text(100, 30, text="MAIN MENU", font=("Arial", 20, "bold", "underline"),
fill="purple")
start = canvas1.create_text(60, 88, text = "GO! :", font=("Verdana", 20, "bold"), fill="purple")
htp = canvas1.create_text(60, 138, text = "How to ", font=("Verdana", 20, "bold"), fill="purple")
htp2 = canvas1.create_text(60, 160, text = "play :", font=("Verdana", 20, "bold"), fill="purple")
# All the functions

def click():
root.destroy()
lvls_menu.menu()

# All the buttons
start_button = Button(root, text="START", command = lambda:click(), padx=20, pady=20, fg="purple",
bg= "white", font=("bold", 20), cursor="plus")
start_button.place(x=110, y=65, width=100, height=45)
controlls_button = Button(root, text="CONTROLLS", command = controls.controlls_menu, padx=20, pady=20,
fg="purple",bg= "white", font=("Arial", 15), cursor="plus")
controlls_button.place(x=120, y=130, width=125, height=50)
credits_button = Button(root, text="CREDITS", command = lambda:controls.credits_menu(), padx=20, pady=20,
fg="purple",bg= "white", font=("Arial", 15), cursor="plus")
credits_button.place(x=576, y=550, width=125, height=50)
root.mainloop() 

当你尝试在Tkinter中做这样的事情时,它可能会相当混乱,我建议尝试将menu()lvls_menu移动到你的主python脚本中,并将整个主菜单包装在另一个函数中,这样你就可以引用函数而不必通过导入。

我已经将提供的代码编辑成这个粗略的版本,希望您可以将其集成到您的程序中。

如果你真的想要完全独立,那么你最好的选择是使用pyinstaller创建exe和使用os.startfile()开始是由每个可执行脚本,并使用exit()代替.destroy()如果你选择走这条路因为就像我说的进口模块不同的菜单可能会变得非常混乱在Tkinter我也显示为菜单创建类并将所有菜单的相应函数的内部类来组织它。

from tkinter import *
global root, menuRoot

def main_window():
global root
root = Tk()
root.geometry("700x600")
root.title("*The Stargazers* (MAIN MENU)")
icon = PhotoImage(file="C:\Users\LENOVO\Desktop\Adeeb\pythonProjects\ALT project\LOGO.png")
root.iconphoto(False, icon)
background = PhotoImage(file = "C:\Users\LENOVO\Desktop\Adeeb\pythonProjects\ALT project\bg1.png")
canvas1 = Canvas(root, width=700, height=600, cursor='plus')
canvas1.place(anchor='nw')
canvas1.create_image( 0, 0, image = background, anchor = "nw")

# You don't need to assign variables when adding items to the canvas
canvas1.create_text(100, 30, text="MAIN MENU", font=("Arial", 20, "bold", "underline"),
fill="purple")
canvas1.create_text(60, 88, text = "GO! :", font=("Verdana", 20, "bold"), fill="purple")
canvas1.create_text(60, 138, text = "How to ", font=("Verdana", 20, "bold"), fill="purple")
canvas1.create_text(60, 160, text = "play :", font=("Verdana", 20, "bold"), fill="purple")
start_button = Button(root, text="START", command=lambda: click(), padx=20, pady=20, fg="purple",
bg="white", font=("bold", 20), cursor="plus")
start_button.place(x=110, y=65, width=100, height=45)
controlls_button = Button(root, text="CONTROLLS", command=controls.controlls_menu, padx=20, pady=20,
fg="purple", bg="white", font=("Arial", 15), cursor="plus")
controlls_button.place(x=120, y=130, width=125, height=50)
credits_button = Button(root, text="CREDITS", command=lambda: controls.credits_menu(), padx=20, pady=20,
fg="purple", bg="white", font=("Arial", 15), cursor="plus")
credits_button.place(x=576, y=550, width=125, height=50)
def menu():
global menuRoot
# This is just a place holder chunk of code, add all your functionality from lvls_menu.menu() to this, and add all dependices from lvls_menu to this main script.
menuRoot = Tk()
menuRoot.geometry("500x500")
menuCanvas = Canvas(width=500,height=500)
menuCanvas.pack(fill="both", expand=True)
mainMenu = Button(text="Main Menu", command=go_back)
menuCanvas.create_window(150, 150, anchor="nw", window=mainMenu)

def go_back():
global menuRoot
menuRoot.destroy()
main_window()
def click():
global root
root.destroy()
menu()

if __name__ == '__main__':
main_window()
root.mainloop()

最新更新