web-dev-qa-db-ja.com

Mac OS XでTkinterボタンの前景色または背景色を変更するにはどうすればよいですか?

私はプログラミング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の変更が(簡単に)サポートされていない場合があります。

21
Anthony Cramp

答えは、Macのボタンは背景と前景色の変更をサポートしていないだけだと思います。ご覧のとおり、これはTkに固有のものではありません。

20
Bryan Oakley

Macのボタンの背景を変更するための解決策があります。

使用する:

highlightbackground=color

例えば:

submit = Button(root, text="Generate", highlightbackground='#3E4149')

これにより、次のようになり、背景に収まるニースボタンが表示されます。

Button

14
Luka Kerr

私のようにこの質問に遭遇した他の誰にとっても、解決策は 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()
13
Jason Oster

何年経ってもこれがまだ問題であることは非常に迷惑です。

とにかく、他の人が述べたように、ハイライト背景(境界線の色)はMacの背景の代わりに使用できます。ボーダーのサイズを大きく(ボタンのサイズ以上)大きくすると、ニースの無地の背景色になります。これにより、ボタンにラベルの外観が与えられます。

enter image description here

これは場所を使用している場合は機能しますが、グリッドなどを使用している場合は機能しません。グリッドでは、枠のサイズを大きくすると、残念ながらボタンのサイズが自動的に大きくなります。

ただし、グリッドを使用する必要がある場合は、いつでもハックできます。無色のグリッドボタンを作成します。次に、場所を使用して、その上に背景色ボタンをペアレント化します。これは、「コマンド」が付いたボタン、またはイベントをバインドするボタンです。

コードを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()
4
Mike McReynolds

これは私のために働きました:

    self.gnuplot_bt = Button(
        self.run_but_container, text="Plot with Gnuplot", font="Helvetica", command=self.gnuplot,
        highlightbackground ="#8EF0F7", pady=2, relief=FLAT
    )
1
Thiago Lopes

これがうまくいかない理由を探していました。私はそれを試して修正する簡単な方法を見つけました。ラベルを付けて、クリックをラベルにバインドすることです。次に、クリックを模倣するためにラベルの色を短時間変更します。ここに例があります。

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

あなたは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 を参照してください

0
Victor

次のコードがMac OS Xのtkinterボタンの背景を変更できることを確認します。

self.btn_open = tk.Button(self.toolbar,
                          text = "Open",
                          command=self.open,
                          highlightbackground = "gray")

ただし、ttk.Buttonのbgは変更できません。

0
Ren Weibo