0

我有三个窗口:

  • 根窗口
  • 顶层窗口
  • 颜色选择器窗口。

根窗口有一个打开顶层的菜单命令。顶层有一个打开颜色选择器的按钮。

当按下颜色选择器按钮并打开颜色选择器时,会发生一些奇怪的事情。顶层窗口被发送到根窗口后面。

在点击按钮之前windows的分层是这样的:

  • 顶层

点击按钮后windows的分层是这样的:

  • 顶层
  • 颜色选择器

为什么会这样?我怎样才能阻止这种情况发生?(我使用的是 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()
4

1 回答 1

3

您没有告诉颜色对话框它属于哪个窗口,因此默认情况下它会将自身附加到根窗口。对于某些窗口管理器,这将导致父窗口提升到堆叠顺序的顶部。

尝试传入parent属性,给它一个顶层窗口的值:

tkChooseColor.askcolor(parent=self)
于 2013-09-19T21:52:38.327 回答