簡體   English   中英

如何在 tkinter 的主 window 前面放置一個頂級 window?

[英]How to put a toplevel window in front of the main window in tkinter?

有什么辦法可以在主 window 前面放置一個頂級 window?

這是代碼:

from tkinter import *

root = Tk()
root.geometry('1280x720')

def create_new_window():
    root2 = Toplevel()
    root2.geometry('500x500')

create_new_window()

mainloop()

在這里,我希望root2 window 始終保持在root window 的前面。

我嘗試使用root2.attributes('-topmost', 1) ,但問題是這一行也將 window 置於所有其他程序之上。

我想要的是頂層 window 應該只在主 window 的前面,當我點擊主 window 時,它不應該是 go。

有沒有辦法在 tkinter 中實現這一點?

如果有人可以幫助我,那就太好了。

我認為你想要的是一個瞬態 window,你需要這樣做:

root2.wm_transient(root)

從手冊:

wm 瞬態 window?master? 如果指定了 master,則通知 window 管理器 window 是一個臨時的 window(例如下拉菜單),代表 master 工作(其中 master 是頂級窗口的路徑名) 如果 master 指定為空字符串,則 window 將被標記為不再是瞬態 window。 否則,如果 window 當前不是瞬態 window,則該命令返回窗口當前主窗口的路徑名稱,或返回空字符串。 瞬態 window 將鏡像主節點中的 state 更改,並在初始映射時繼承主節點的 state。 試圖使 window 成為自身的瞬態是錯誤的。

所以你可以做這樣的事情,但對我來說似乎有問題。 我所做的是將FocusOut事件綁定到創建的頂層,因此每次它失去焦點時,它都會觸發事件stackingorder以將 windows 置於正確的順序。 您可能需要為您選擇的幾個事件使此代碼過期,但為了讓您了解.. 這是代碼:

import tkinter as tk

def add_toplevel(idx, toplevel):
    if idx == 'end':
        idx = len(toplevels)
    toplevels.insert(idx,toplevel)

def create_new_window():
    root2 = tk.Toplevel()
    root2.geometry('500x500')
    add_toplevel('end',root2)
    root2.bind('<FocusOut>', stackingorder)

def stackingorder(event):
    for toplevel in toplevels:
        toplevel.lift()
        toplevel.update_idletasks()

toplevels = [] #stacking order by index

root = tk.Tk()

create_new_window()


root.mainloop()

您可能對此也感興趣: https://stackoverflow.com/a/10391659/13629335

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM