Tkinter建筑窗户类似于根

安布米尔

我目前正在处理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()
米莎·梅尔尼克(Misha Melnyk)

就像在评论中一样,这Toplevel是要走的路。我改变了什么:

  1. window全局移动对象

  2. 重命名功能使其 makeWindow(master)

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

  4. New_page 进行了修改以制作新的Toplevel()小部件

  5. TITLE_FRAME 现在先制成,然后在其上调用网格

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

  1. 我们想重新映射结束行为以按照我们的意愿行事。这是通过完成的window.protocol("WM_DELETE_WINDOW",callback)在这种情况下,我们必须定义回调函数deleteWindow(win)

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

  3. 知道是否应关闭程序的方式是跟踪activeWindows变量中活动窗口的数量创建窗口时,数量增加,而删除时数量减少。如果活动窗口的数量为0,我们可以删除主窗口以干净地关闭程序。

  4. 我们绑定deleteWindow(win)回调的方法是通过匿名函数。通常,上面提到的协议不提供任何参数,但是我们想知道哪个窗口调用了该函数。为此,无论何时绑定窗口销毁,我们都使用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()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何设计行为类似于根类的python类

来自分类Dev

命令类似于pygame在tkinter中的get_rel()吗?

来自分类Dev

命令类似于pygame在tkinter中的get_rel()吗?

来自分类Dev

如何使用OpenCV从建筑物的图片计算窗户的尺寸?

来自分类Dev

SQL OR的功能类似于AND

来自分类Dev

系统类似于NakedObjects?

来自分类Dev

类似于划船的代码

来自分类Dev

类似于Xkill for Mir

来自分类Dev

类似于SQL的过滤

来自分类Dev

类似于If语句

来自分类Dev

TabbedView类似于Spotify

来自分类Dev

在Python3 / tkinter中刷新画布类似于MATLAB“保持”

来自分类Dev

是否有类似于Stata中的foreach循环的R函数,用于基于现有变量的名称(或根)创建新变量?

来自分类Dev

与SelectedItem类似,但菜单项类似于?

来自分类Dev

这个std :: function类似于

来自分类Dev

msysGit类似于sudo的命令

来自分类Dev

类似于字典的JSON模式

来自分类Dev

类似于iPython的zsh完成?

来自分类Dev

Fiddler中类似于“ <>”的图标

来自分类Dev

实现类似于UICollectionView的“ registerClass”

来自分类Dev

挂钩框架(类似于Detours)

来自分类Dev

类似于目录的URL参数

来自分类Dev

类似于bsxfun的矩阵乘积

来自分类Dev

Arangodb AQL类似于SQL的NOT IN

来自分类Dev

类似于Gson的Scala库

来自分类Dev

类似于Lightbox示例的代码

来自分类Dev

函数类似于numpy的diff

来自分类Dev

类似于SIMD指令的宏

来自分类Dev

函数类似于strcat()的问题