我有一个程序,我想在其中使用tkinter的色彩调整器对话框. 我的问题是 colored颜色 搜索器对话框总是在根窗口的左上角打开. 例如,通过下面的代码,我得到了如图所示的结果.

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

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

推荐答案

看来相对于父母一定是在这个位置.因此,一个关于假隐藏父母的工作技巧:

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()

Python相关问答推荐

我们可以在apps.py?中使用Post_Save信号吗

Python tkinter关闭第一个窗口,同时打开第二个窗口

在IIS中运行的FastAPI-获取权限错误:[Win错误10013]试图以其访问权限禁止的方式访问插槽

Pandas .类型错误:只能将字符串(而不是int)连接到字符串

FastAPI:使用APIRouter路由子模块功能

Docker-compose:为不同项目创建相同的容器

将嵌套列表的字典转换为数据框中的行

为什么dict(id=1,**{id:2})有时会引发KeyMessage:id而不是TypMessage?

无法使用python.h文件; Python嵌入错误

如何销毁框架并使其在tkinter中看起来像以前的样子?

多处理代码在while循环中不工作

Pandas 在最近的日期合并,考虑到破产

Python虚拟环境的轻量级使用

在np数组上实现无重叠的二维滑动窗口

导入...从...混乱

在Django admin中自动完成相关字段筛选

使用Python从URL下载Excel文件

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

AES—256—CBC加密在Python和PHP中返回不同的结果,HELPPP

跳过嵌套JSON中的级别并转换为Pandas Rame