使用用户在条目窗口小部件tkinter上输入的属性更新或更改标签的样式吗?

时间:2019-10-28 08:37:59

标签: python tkinter

在我的Gui应用程序中,每个小部件都有按钮。如果用户单击名为标签的按钮,则会在窗口上形成一个标签小部件。我要求用户通过输入来设置标签属性(bg颜色和fg颜色)小部件,我需要使用这些属性更新该现有标签。 有什么办法吗?

from tkinter import *
def try1():
    w=Tk()
    l=Label(w,text="Hi")
    l.pack()
win=Tk()
b=Button(win,text="Label",command=try1)
b.pack()
ety_bgcolor=Entry(win,font=("",13,""), borderwidth=2, relief="groove")
ety_bgcolor.pack()
ety_fgcolor=Entry(win,font=("",13,""), borderwidth=2, relief="groove")
ety_fgcolor.pack()

3 个答案:

答案 0 :(得分:0)

误解了问题编辑:

from tkinter import *
def try1():
    w=Tk()
    l=Label(w,text="Hi")
    l.config(bg=bgcolor.get())
    l.config(fg=fgcolor.get())
    l.pack()

win=Tk()
b=Button(win,text="Label",command=try1)
b.pack()

bgcolor = StringVar()
ety_bgcolor=Entry(win,font=("",13,""), borderwidth=2, relief="groove",textvariable=bgcolor)
ety_bgcolor.pack()
fgcolor = StringVar()
ety_fgcolor=Entry(win,font=("",13,""), borderwidth=2, relief="groove",textvariable=fgcolor)
ety_fgcolor.pack()

win.mainloop()

如果我正确理解您的要求,则希望用户单击按钮时主窗口获得新标签吗? 如果是这样,您需要将主窗口传递给函数,或者使用全局名称,或者使用lambda函数将其作为函数中的变量传递。

使用全局:

from tkinter import *
def try1():
    w=win # referencing the main window globally
    l=Label(w,text="Hi")
    l.pack()

win=Tk()
b=Button(win,text="Label",command=try1)
b.pack()
ety_bgcolor=Entry(win,font=("",13,""), borderwidth=2, relief="groove")
ety_bgcolor.pack()
ety_fgcolor=Entry(win,font=("",13,""), borderwidth=2, relief="groove")
ety_fgcolor.pack()

win.mainloop()

使用lambda方法:

from tkinter import *
def try1(w): # getting the main window passed
    l=Label(w,text="Hi")
    l.pack()

win=Tk()
b=Button(win,text="Label",command = lambda: try1(win)) # passing the main window.
b.pack()
ety_bgcolor=Entry(win,font=("",13,""), borderwidth=2, relief="groove")
ety_bgcolor.pack()
ety_fgcolor=Entry(win,font=("",13,""), borderwidth=2, relief="groove")
ety_fgcolor.pack()

win.mainloop()

如果要设置颜色,则必须在输入字段中添加字符串变量,并在设置标签配置设置时引用这些变量。

from tkinter import *
def try1(w):
    l=Label(w,text="Hi")
    l.config(bg=bgcolor.get())
    l.config(fg=fgcolor.get())
    l.pack()

win=Tk()
b=Button(win,text="Label",command = lambda: try1(win))
b.pack()

bgcolor = StringVar()
ety_bgcolor=Entry(win,font=("",13,""), borderwidth=2, relief="groove",textvariable=bgcolor)
ety_bgcolor.pack()
fgcolor = StringVar()
ety_fgcolor=Entry(win,font=("",13,""), borderwidth=2, relief="groove",textvariable=fgcolor)
ety_fgcolor.pack()


win.mainloop()

答案 1 :(得分:0)

使用ImageFields方法更改configure属性。

更改bg颜色和fg颜色的示例:

Label

答案 2 :(得分:0)

您只需在创建标签之前调用条目小部件上的get方法即可获取其值。

def try1():
    ...
    bg = ty_bgcolor.get()
    fg = ety_fgcolor
    l=Label(w,text="Hi", background=bg, foreground=fg)
...