質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

解決済

1回答

985閲覧

colorchooserをメインウィンドウが隠れないように表示したい

nkfrom_asu

総合スコア10

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

0グッド

0クリップ

投稿2022/04/14 14:46

編集2022/04/16 08:46

実現したいこと

colorchooserをメインウィンドウが隠れないように表示したいです。
表示位置の変更は可能でしょうか?
メインウィンドウの左下へ配置されるようにしたいです。

該当のソースコード

Python

1import tkinter 2from tkinter.colorchooser import askcolor 3 4def colorpicker(): 5 color = askcolor()[1] 6 bu.config(bg = color) 7 8root = tkinter.Tk() 9root.minsize(width = 200, height = 0) 10bu = tkinter.Button(text = "Change Color", command = colorpicker) 11bu.pack() 12 13root.mainloop()

試したこと

該当のソースコードはただボタンの色を変更するだけのものです。
現時点では方法が全く思いつかず、このような形での質問となることをお許しください。
よろしくお願いいたします。

追記

https://github.com/j4321/tkColorPicker/pull/7

Python

1#colorpicker.py 2self.palette = [next(colorcycle) for _ in range(16)] # 88行目 3f.grid(row=i % 4, column=i // 4, padx=2, pady=2) # 181行目

Python

1custom_palette = ["#ffffff", "#c0c0c0", "#808080", "#000000", "#ff0000", "#800000", "#ffff00", 2 "#808000", "#00ff00", "#008000", "#00ffff", "#008080", "#0000ff", "#000080", 3 "#ff00ff", "#800080"]

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

残念ながら、簡単な方法はありません。

colorchooser で出現する色選択ダイアログは、tkinter で作られたものではなく
プラットフォーム固有のシステムダイアログを呼び出す機能なので、Pythonからは
「ウィンドウのタイトル」「デフォルトの選択色」以外はカスタマイズできません。

解決策

A) プラットフォーム独自のAPIを呼び出す。

割と難しい方法です。そのダイアログが実装された方法と同じ API を使って制御します。
実装に関して課題が沢山あるので、余程の理由がない限り解決策としてお勧めではありませんが、
一応、仕組み的に可能ではあります。

B) tkinter で実装された代替ダイアログを使う

https://pypi.org/project/tkcolorpicker/
Python/tkinter で実装された ColorDialog を使います。(外観は変わります)
askcolor 関数が提供されてますが、この関数に少し手を加える

python

1# NOTE: ライブラリのインストール pip install tkcolorpicker 2 3import tkinter as tk 4from tkcolorpicker.colorpicker import ColorPicker 5 6def askcolor(color="red", parent=None, title="Color Chooser", alpha=False, pos=None): 7 col = ColorPicker(parent, color, alpha, title) 8 9 if pos: 10 x, y = pos 11 col.wm_geometry(f"+{x}+{y}") # <--- ダイアログの座標を移動 12 13 col.wait_window(col) 14 res = col.get_color() 15 if res: 16 return res[0], res[2] 17 else: 18 return None, None 19 20 21root = tk.Tk() 22root.update() 23x, y = root.winfo_x(), root.winfo_y() 24h = root.winfo_reqheight() 25pos = (x, y+h+30) # ※ +30 はタイトルバーの高さ補正。tkitner側ではタイトルバーのサイズを所得するAPIはありません。 26print(pos) 27 28askcolor(pos=pos)

座標データの渡し方は、引数にする等工夫してください。 追記: コードに反映
座標は、親ウィンドウの座標とサイズ(高さ)から求めます。
情報の所得は winfo_ 系のメソッドを調べて下さい。


C) ウィンドウのオートメーション

内部的には (A) の方法ですが、RPA 系のツールを用いて操作可能な場合もあります。

投稿2022/04/15 03:24

編集2022/04/15 11:53
teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nkfrom_asu

2022/04/16 08:30

回答ありがとうございます。tkcolorpickerは初めて知りました。 基本色が少ないですが、colorpicker.pyhttps://github.com/j4321/tkColorPicker/pull/7 に変更し、 コードを少し変更することで、行数を増やせました (画像を追記しました)。 これを利用していこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問