簡體   English   中英

在 Tkinter 中動態更改小部件背景顏色

[英]Dynamically change widget background color in Tkinter

我有一個簡單的 tkinter 窗口。 它由一個小窗口、一個計時器和一個設置計時器的按鈕組成。 我不想詳細介紹代碼。

我想更改窗口中所有小部件的背景(按鈕、標簽等)。

我的第一個想法是使用一個全局變量,例如,我將其設置為"red" ,並將所有小部件background選項與全局變量相關聯。 然后,在按下按鈕時,我將全局變量更改為"green" (以便所有小部件的背景發生變化)但沒有任何反應。

我的理解是.mainloop()更新了窗口。 當我的變量發生變化而不重新啟動我的應用程序時,如何讓小部件更改背景顏色?

從我的第一印象我認為這應該是你要找的,作為一個簡單的例子

from Tkinter import *

root = Tk()
global colour
global colourselection 
global count 
colour = ""
colourselection= ['red', 'blue']
count = 1

def start(parent):
    Tk.after(parent, 1000, change)

def change():
    global colour 
    global colourselection
    global count 
    if (count < 2 ):
        colour = colourselection[count]
        button.configure(bg = colour)
        count + 1
    else:
        colour = colourselection[count]
        button.configure(bg = colour)
        count = 1 
    start(root)



button = Button(text = 'start', command = lambda: start(root))
button.pack()

root.mainloop()

我相信你可以解決任何問題,它沒有經過測試

背景顏色不會自動改變。 Tkinter 有能力用字體做這樣的事情,但不能用顏色。

您將不得不編寫一些代碼來遍歷所有小部件並更改它們的背景顏色。

(我將此答案發布到了一個類似的問題,我認為這也適用於這種情況:)

在我的一生中,我無法僅使用 configure 方法讓它工作。 最終起作用的是將所需的顏色(在我的情況下,按鈕的顏色)設置為StringVar() (直接設置為get() ),然后也使用按鈕上的配置。

我為我最需要的用例編寫了一個非常通用的示例(有很多按鈕,我需要在其中引用它們(在 Python 2 和 3 中測試):

蟒蛇3:

import tkinter as tk

蟒蛇2:

import Tkinter as tk

代碼

root = tk.Tk()
parent = tk.Frame(root)

buttonNames = ['numberOne','numberTwo','happyButton']
buttonDic = {}
buttonColors = {}

def change_color(name):
    buttonColors[name].set("red")
    buttonDic[name].config(background=buttonColors[name].get())

for name in buttonNames:
    buttonColors[name] = tk.StringVar()
    buttonColors[name].set("blue")
    buttonDic[name] = tk.Button(
            parent,
            text = name,
            width = 20,
            background = buttonColors[name].get(),
            command= lambda passName=name: change_color(passName)
            )

parent.grid(row=0,column=0)
for i,name in enumerate(buttonNames):
    buttonDic[name].grid(row=i,column=0)

root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM