Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Mac OS X上更改Tkinter按钮的前景色或背景色?_Python_Macos_Tkinter_Button_Tkinter Button - Fatal编程技术网

Python 如何在Mac OS X上更改Tkinter按钮的前景色或背景色?

Python 如何在Mac OS X上更改Tkinter按钮的前景色或背景色?,python,macos,tkinter,button,tkinter-button,Python,Macos,Tkinter,Button,Tkinter Button,我一直在学习Python编程中的Tkinter章节,遇到了一个按钮的前景色和背景色不会改变的问题。我正在使用Python2.6.1开发MacOSX10.6系统。标签的颜色会改变,但按钮的颜色不会改变。例如: from Tkinter import * Label(None, text='label', fg='green', bg='black').pack() Button(None, text='button', fg='green', bg='black').pack() mainlo

我一直在学习Python编程中的Tkinter章节,遇到了一个按钮的前景色和背景色不会改变的问题。我正在使用Python2.6.1开发MacOSX10.6系统。标签的颜色会改变,但按钮的颜色不会改变。例如:

from Tkinter import *

Label(None, text='label', fg='green', bg='black').pack()
Button(None, text='button', fg='green', bg='black').pack()

mainloop()
submit = Button(root, text="Generate", highlightbackground='#3E4149')
在我的Mac系统上,标签的颜色会改变,但按钮的颜色不会改变。在使用Python 2.6.1的Windows系统上,标签和按钮的颜色都会改变

有人知道出了什么问题吗

我已经检查了Interface Builder,似乎没有选项可以更改该工具中按钮的前景色或背景色。可以编辑标签的前景色和背景色


Mac OS X渲染系统(Quartz?)可能不支持(轻松地)更改按钮的前景和背景。

我认为答案是Mac上的按钮根本不支持更改背景和前景颜色。正如您所看到的,这不是Tk独有的。

对于像我一样遇到这个问题的其他人来说,解决方案是使用该模块,该模块在OS X 10.7上默认可用。不幸的是,设置背景色仍然无法在开箱即用的情况下工作,但文本颜色可以

它需要对代码进行一些小的更改:

原件:

从Tkinter导入*
标签(无,text='Label',fg='green',bg='black').pack()
按钮(无,text='Button',fg='green',bg='black').pack()
mainloop()
使用ttk:

将tkinter作为tk导入
从tkinter导入ttk
root=tk.tk()
#background=“…”不起作用。。。
ttk.Style().configure('green/black.TLabel',前台='green',后台='black')
ttk.Style().configure('green/black.TButton',前台='green',后台='black')
label=ttk.label(root,text='I是一个带有text!'的ttk.label!',style='green/black.TLabel')
label.pack()
button=ttk.button(root,text='Click Me!',style='green/black.TButton')
button.pack()
root.mainloop()

我一直在想为什么这不起作用。我找到了一个快速的方法来尝试和修复它,就是有一个标签,然后用标签绑定一个点击。然后让标签在短时间内改变颜色以模拟点击。这里有一个例子

def按钮按(*args):
searchB.config(state=“active”)
searchB.update()
睡眠时间(0.2)
searchB.config(state=“normal”)
##你要什么命令都行
searchB=标签(main,text=“Search”,bg=“#fecc14”,fg=“Black”,activebackground=“Red”,highlightbackground=“Black”)
searchB.bind(“,startSearch)
searchB.pack()

有一种解决方案可以更改Mac上按钮的背景

使用:

例如:

from Tkinter import *

Label(None, text='label', fg='green', bg='black').pack()
Button(None, text='button', fg='green', bg='black').pack()

mainloop()
submit = Button(root, text="Generate", highlightbackground='#3E4149')
这将产生一个与背景相匹配的漂亮按钮:


确认以下代码可以更改Mac OS X上tkinter按钮的背景

self.btn_open = tk.Button(self.toolbar,
                          text = "Open",
                          command=self.open,
                          highlightbackground = "gray")
但它不能改变ttk.按钮的背景。

这对我来说很有效:

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

多年后,这仍然是一个问题,这让人非常恼火

无论如何,正如其他人所提到的,highlightbackground(边框颜色)可以用来代替Mac上的背景。如果您将边框的大小增加到巨大(按钮的大小或更大),您将得到一个漂亮的纯色背景。这将使您的按钮具有标签的外观

如果您使用的是place,则此选项有效,但如果您使用的是grid之类的东西,则此选项无效。不幸的是,使用栅格时,增加边框大小会自动增加按钮大小

然而,若你们必须使用网格,你们总是可以破解它…创建你们的无色网格按钮。接下来使用place将背景色按钮设置为其顶部的父对象。这将是带有“命令”的按钮,或者是绑定事件的按钮

如果希望代码独立于操作系统,则可以添加“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()
您可以使用PyPI中的库来执行此操作

安装:

  • 对于Python2,使用
    pip安装tkmacosx

  • 对于Python3,使用
    pip3安装tkmacosx


这就是您使用tkmacosx的方式:

from tkinter import *
from tkmacosx import Button

root = Tk()

B1 = Button(root, text='Mac OSX', bg='black',fg='green', borderless=1)
B1.pack()

root.mainloop()
它在MacOSX上运行良好

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

太棒了;事实上,
kwarg:highlightbackground
与tkinter OSXYes@BrianOakley一起工作,这就是我所说的。
highlightbackground
background
不同
highlightbackground
仅影响按钮边缘周围的小边框。按钮本身的背景不会改变。有了莫哈韦,这种方法适用于操作系统处于黑暗模式时默认为白色文本的环境。这是我唯一能让我的应用程序正常工作的方法。P.P.S我认为这是最简单的方法。如果你发布这样的答案,你必须考虑到你的回答晚了9年零9个月。。。因此,请包含tkmacos的版本信息和出生日期。这将对stack overflow的其他用户有用。@ZF007-StackOverflow是永久的。这是参考资料,不是社交网络。就像维基百科一样,内容有多旧并不重要。没有任何东西会因年龄或不活动而自动锁定。这是最好的答案,应该标记为正确答案。@AlexanderB:这是跨平台的,也请参见10.15 catalina上的作品,谢谢@安东尼抽筋考虑改变接受的答案。完美,这固定了我的问题!现在有一个更好的答案-使用
tkmacosx
。易于通过pip安装-要求看起来很简单。。。据我所知,它都是纯python的,可以在pypi上使用。维克托·沃斯莫托提到这一点: