我有三个窗口:
根窗口有一个打开顶层的菜单命令。顶部有一个按钮,可以打开颜色选择器。
当按下颜色选择按钮并且颜色选择器打开时,会发生奇怪的事情。顶层窗口在根窗口后面发送。
在点击按钮之前,窗口的分层是这样的:
点击按钮后,窗口的分层是这样的:
为什么会这样?我怎么能阻止这种情况发生? (我使用的是Windows 7和python 2.7)
这是一个简化的工作代码示例:
from Tkinter import *
import ttk
import tkColorChooser
class Root(Tk):
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
self.menu = Menu(self)
self.menu.add_command(label="Open Toplevel", command=self.create_toplevel)
self.config(menu=self.menu)
def create_toplevel(self):
self.new_toplevel = TopLevelWithButton(self)
class TopLevelWithButton(Toplevel):
def __init__(self, *args, **kwargs):
Toplevel.__init__(self, *args, **kwargs)
self.button = ttk.Button(self, text="Color Chooser", command=self.open_chooser)
self.button.grid(row=0, column=0)
def open_chooser(self):
tkColorChooser.askcolor()
root = Root()
root.mainloop()
答案 0 :(得分:2)
您没有告诉颜色对话框它属于哪个窗口,因此默认情况下它会将自身附加到根窗口。对于某些窗口管理器,这将导致父窗口被提升到堆叠顺序的顶部。
尝试传入parent
属性,为其赋予顶级窗口的值:
tkChooseColor.askcolor(parent=self)