我有一个程序,我想使用 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()
是否可以调整对话框的初始位置? 例如,它总是相对于打开对话框的按钮定向?
看起来它相对于父级一定是在这个位置。这是一个使用假隐藏父级的有效技巧:
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()