Tkinter颜色选择窗口焦点

时间:2013-09-19 20:03:43

标签: python user-interface tkinter

我有三个窗口:

  • 根窗口
  • Toplevel窗口
  • 颜色选择窗口。

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

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

在点击按钮之前,窗口的分层是这样的:

  • ROOT
  • TOPLEVEL

点击按钮后,窗口的分层是这样的:

  • TOPLEVEL
  • ROOT
  • COLORCHOOSER

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

1 个答案:

答案 0 :(得分:2)

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

尝试传入parent属性,为其赋予顶级窗口的值:

tkChooseColor.askcolor(parent=self)