Tkinter - 控制颜色选择器的位置

问题描述 投票:0回答:1

我有一个程序,我想使用 tkinter 的颜色选择器对话框。 我的问题是颜色选择器对话框始终在根窗口的左上角打开。 例如,使用以下代码,我得到的结果如图所示。

import tkinter as tk
from tkinter import ttk
from tkinter.colorchooser import askcolor

class App():
    def __init__(self, master):  
        self.master = master
        self.master.geometry('400x200')
        self.button = ttk.Button(self.master, text='Select a Color', command=self.change_color)
        self.button.pack(expand=True)
        
    def change_color(self):
        colors = askcolor(title="Tkinter Color Chooser")
        root.configure(bg=colors[1])

root = tk.Tk()
app = App(root)
app.master.mainloop()

color chooser dialog

是否可以调整对话框的初始位置? 例如,它总是相对于打开对话框的按钮定向?

python tkinter
1个回答
0
投票

看起来它相对于父级一定是在这个位置。这是一个使用假隐藏父级的有效技巧:

import tkinter as tk
from tkinter import ttk
from tkinter.colorchooser import askcolor


class App:
    def __init__(self, master):
        self.master = master
        self.master.geometry('400x200')
        self.button = ttk.Button(self.master, text='Select a Color', command=self.change_color)
        self.button.pack(expand=True)

        self.toplevel = tk.Toplevel(self.master)
        self.toplevel.withdraw()

    def change_color(self):
        x, y = self.button.winfo_rootx(), self.button.winfo_rooty()
        self.toplevel.geometry(f'+{x}+{y}')
        colors = askcolor(title="Tkinter Color Chooser", parent=self.toplevel)
        root.configure(bg=colors[1])


root = tk.Tk()
app = App(root)
app.master.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.