gpt4 book ai didi

python - Tkinter 构建类似于 Root 的窗口

转载 作者:行者123 更新时间:2023-11-30 21:53:19 27 4
gpt4 key购买 nike

我目前正在研究 Tkinter 代码。我碰巧需要创建与 root 完全相同的新窗口,但我的代码不能完美运行。标题不会出现在新窗口上。这是摘录:

from tkinter import *

#New Window
def New_page():
window()

#Main Window
def window():

window = Tk()
window.resizable(0,0)
window.configure(background='grey')
window.state('zoomed')
window.geometry("2000x4000")

#Title Frame
TITLE_FRAME = Frame(window, relief = GROOVE, bg = "black", width=2000, height=160).grid(row=0, column=0, columnspan = 150, rowspan = 30, sticky=E+W)
Label(TITLE_FRAME, text= 'THIS IS THE TITLE PART', fg='sky blue', bg='black', font='none 40 bold',
borderwidth=5).grid(row=0,column=10)

#New Window Button
ENTRY_FRAME = Frame(window, bg='sky blue', relief = SUNKEN)
ENTRY_FRAME.grid(row=40, column=0, columnspan=20, padx=15, pady=15)
Label(ENTRY_FRAME, text= 'SELECT THE APPROPRIATE DETAILS:',
bg = 'sky blue', fg='black', font='none 10 bold', borderwidth=5).grid(row=0, column=0, columnspan=20)
NEW_WINDOW = Button(ENTRY_FRAME, text="NEW WINDOW", font='None 8 bold', width=30, command=New_page, fg= 'black', bg='white')
NEW_WINDOW.grid(row = 3, column = 0, columnspan = 3, padx = 10, pady = 10)

window.mainloop()

#Calling the Tkinter function
window()

最佳答案

就像评论中一样,Toplevel 是实现此目的的方法。我改变了什么:

  1. 移动了全局window对象

  2. 重命名该函数,使其成为 makeWindow(master)

  3. makeWindow(master) 现在接受主窗口小部件。这将使所有小部件都成为主窗口的一部分。

  4. New_page 已修改为创建新的 Toplevel() 小部件

  5. TITLE_FRAME 现在首先创建,然后在其上调用网格

(编辑)这些编辑修复了原始窗口关闭程序的问题。

  • 我们希望重新映射关闭行为以按照我们的意愿行事。这是通过 window.protocol("WM_DELETE_WINDOW",callback) 完成的。我们必须定义回调函数,在本例中为 deleteWindow(win)

  • 删除窗口的作用是获取一个窗口,如果它是根窗口,则隐藏它。否则,它会删除该窗口。我在代码中使用了 window.withdraw(),但可能有更好的方法。

  • 它知道是否应该关闭程序的方法是通过跟踪 activeWindows 变量中的事件窗口数量。当创建窗口时,数字增加,当删除窗口时,数字减少。如果事件窗口的数量为0,我们可以删除主窗口来干净地关闭程序。

  • 我们绑定(bind) deleteWindow(win) 回调的方式是通过匿名函数。通常,上面提到的协议(protocol)不会给出任何参数,但我们想知道哪个窗口调用了该函数。为此,每当我们绑定(bind)窗口的销毁时,我们都会使用 lambda 定义一个调用 deleteWindow 的匿名函数。

  • .

    from tkinter import *

    window = Tk()
    window.resizable(0,0)
    window.configure(background='grey')
    window.state('zoomed')
    window.geometry("2000x4000")
    activeWindows = 1

    def deleteWindow(win):
    if win == window:
    window.withdraw()
    else:
    win.destroy()

    global activeWindows
    activeWindows-=1
    if activeWindows <= 0:
    window.destroy()

    #New Window
    def New_page():
    global activeWindows
    activeWindows+=1
    NEW_WINDOW=Toplevel(background='grey')
    NEW_WINDOW.geometry("2000x4000")
    NEW_WINDOW.protocol("WM_DELETE_WINDOW",lambda:deleteWindow(NEW_WINDOW))
    makeWindow(NEW_WINDOW)

    #Main Window
    def makeWindow(master):
    #Title Frame
    TITLE_FRAME = Frame(master, relief = GROOVE, bg = "black", width=2000, height=160)
    TITLE_FRAME.grid(row=0, column=0, columnspan = 150, rowspan = 30, sticky=E+W)
    Label(TITLE_FRAME, text= 'THIS IS THE TITLE PART', fg='sky blue', bg='black', font='none 40 bold',
    borderwidth=5).grid(row=0,column=10)

    #New Window Button
    ENTRY_FRAME = Frame(master, bg='sky blue', relief = SUNKEN)
    ENTRY_FRAME.grid(row=40, column=0, columnspan=20, padx=15, pady=15)
    Label(ENTRY_FRAME, text= 'SELECT THE APPROPRIATE DETAILS:',
    bg = 'sky blue', fg='black', font='none 10 bold', borderwidth=5).grid(row=0, column=0, columnspan=20)
    NEW_WINDOW = Button(ENTRY_FRAME, text="NEW WINDOW", font='None 8 bold', width=30, command=New_page, fg= 'black', bg='white')
    NEW_WINDOW.grid(row = 3, column = 0, columnspan = 3, padx = 10, pady = 10)

    window.protocol("WM_DELETE_WINDOW",lambda: deleteWindow(window))

    #Calling the Tkinter function
    makeWindow(window)
    window.mainloop()

    关于python - Tkinter 构建类似于 Root 的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59701108/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com