Обновление или изменение стиля надписи с использованием введенных пользователем свойств на виджет ввода tkinter? - PullRequest
0 голосов
/ 28 октября 2019

В моем приложении Gui у меня есть кнопки для каждого виджета. Если пользователь нажимает на кнопку, названную меткой, в окне будет сформирован виджет метки. Я прошу пользователя установить свойства метки (bg color и fg color) посредством вводавиджет и мне нужно обновить эту существующую метку, используя эти свойства. Есть ли способ сделать это?

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 голосов
/ 28 октября 2019

Используйте метод configure для изменения Label свойств.

Пример изменения цвета bg и fg color:

label.configure(background='yellow')
label.configure(foreground='red')
0 голосов
/ 28 октября 2019

Вам просто нужно вызвать методы get для виджетов ввода, чтобы получить их значение до создания метки.

def try1():
    ...
    bg = ty_bgcolor.get()
    fg = ety_fgcolor
    l=Label(w,text="Hi", background=bg, foreground=fg)
...
0 голосов
/ 28 октября 2019

Не правильно понял вопрос edit:

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

Если я правильно вас понял, вы хотите, чтобы в главном окне появилась новая метка, когда пользователь нажимает кнопку? Если это так, вам нужно передать главное окно функции, используя либо глобальное имя, либо передав его в качестве переменной в функцию с помощью лямбда-функции.

Используя global:

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

С помощью лямбда-метода:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...