私はプログラミングPythonのTkinterの章で作業してきましたが、ボタンの前景色と背景色が変更されないという問題が発生しました。MacOS X 10.6システムで=を使用していますPython 2.6.1。ラベルの色は変わりますが、ボタンの色は変わりません。例:
from Tkinter import *
Label(None, text='label', fg='green', bg='black').pack()
Button(None, text='button', fg='green', bg='black').pack()
mainloop()
Macシステムでは、ラベルの色は変わりますが、ボタンの色は変わりません。 Python 2.6.1を使用するWindowsシステムでは、ラベルとボタンの両方の色が変わります。
誰が何が悪いのか知っていますか?
Interface Builderをチェックしましたが、そのツールにはボタンの前景色または背景色を変更するオプションがないようです。ラベルの前景色と背景色を編集する機能があります。
Mac OS Xレンダリングシステム(Quartz?)では、ボタンのfgとbgの変更が(簡単に)サポートされていない場合があります。
答えは、Macのボタンは背景と前景色の変更をサポートしていないだけだと思います。ご覧のとおり、これはTkに固有のものではありません。
私のようにこの質問に遭遇した他の誰にとっても、解決策は ttk モジュールを使用することです。これはOS X 10.7でデフォルトで利用可能です。残念ながら、背景色の設定はそのままでは機能しませんが、テキストの色は機能します。
コードを少し変更する必要があります。
元の:
from Tkinter import *
Label(None, text='label', fg='green', bg='black').pack()
Button(None, text='button', fg='green', bg='black').pack()
mainloop()
TTKの場合:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
# background="..." doesn't work...
ttk.Style().configure('green/black.TLabel', foreground='green', background='black')
ttk.Style().configure('green/black.TButton', foreground='green', background='black')
label = ttk.Label(root, text='I am a ttk.Label with text!', style='green/black.TLabel')
label.pack()
button = ttk.Button(root, text='Click Me!', style='green/black.TButton')
button.pack()
root.mainloop()
何年経ってもこれがまだ問題であることは非常に迷惑です。
とにかく、他の人が述べたように、ハイライト背景(境界線の色)はMacの背景の代わりに使用できます。ボーダーのサイズを大きく(ボタンのサイズ以上)大きくすると、ニースの無地の背景色になります。これにより、ボタンにラベルの外観が与えられます。
これは場所を使用している場合は機能しますが、グリッドなどを使用している場合は機能しません。グリッドでは、枠のサイズを大きくすると、残念ながらボタンのサイズが自動的に大きくなります。
ただし、グリッドを使用する必要がある場合は、いつでもハックできます。無色のグリッドボタンを作成します。次に、場所を使用して、その上に背景色ボタンをペアレント化します。これは、「コマンド」が付いたボタン、またはイベントをバインドするボタンです。
コードをOSに依存しないようにする場合は、 'if OS == "Mac"'ステートメントを追加するか、Macではボタンを変更し、WindowsまたはLinuxではボタンをそのままにするカスタム関数を追加することもできます。前者は次のとおりです。
from tkinter import *
import platform
if platform.system() == "Darwin": ### if its a Mac
B = Button(text="Refersh All Windows", highlightbackground="Yellow", fg="Black", highlightthickness=30)
else: ### if its Windows or Linux
B = Button(text="Refresh All Windows", bg="Yellow", fg="Black")
B.place(x=5, y=10, width=140, height=30)
mainloop()
これは私のために働きました:
self.gnuplot_bt = Button(
self.run_but_container, text="Plot with Gnuplot", font="Helvetica", command=self.gnuplot,
highlightbackground ="#8EF0F7", pady=2, relief=FLAT
)
これがうまくいかない理由を探していました。私はそれを試して修正する簡単な方法を見つけました。ラベルを付けて、クリックをラベルにバインドすることです。次に、クリックを模倣するためにラベルの色を短時間変更します。ここに例があります。
def buttonPress(*args):
searchB.config(state = "active")
searchB.update()
time.sleep(0.2)
searchB.config(state = "normal")
## Whatever command you want
searchB = Label(main, text = "Search", bg = "#fecc14", fg = "Black", activebackground = "Red", highlightbackground="Black")
searchB.bind("<Button-1>", startSearch)
searchB.pack()
あなたはPypiのtkmacosxでそれを行うことができます
インストール:
python2用
pip install tkmacosx
python3用
pip3 install tkmacosx
from tkinter import *
from tkmacosx import Button
root = Tk()
B1 = Button(root, text='Mac OSX', bg='lightblue',fg='yellow', borderless=1)
B1.pack()
root.mainloop()
Mac OS Xでは問題なく動作します。
PS 詳細は it on Pypi を参照してください
次のコードがMac OS Xのtkinterボタンの背景を変更できることを確認します。
self.btn_open = tk.Button(self.toolbar,
text = "Open",
command=self.open,
highlightbackground = "gray")
ただし、ttk.Buttonのbgは変更できません。