Как динамически изменять значение метки в зависимости от ComboBox в CustomKinter?

Я впервые использую CustomKinter для создания простого графического интерфейса. Я пытаюсь изменить значение метки customtkinter в зависимости от значения, выбранного в поле со списком. Текстовая переменная для вывода должна измениться в соответствии со значениями функции Calculate_output; выходная метка не меняется.

from tkinter import StringVar

import customtkinter as ctk

root = ctk.CTk()
root.title("Window")
root.geometry("400x300")

label_1 = ctk.CTkLabel(root, text = "Value:", font=("Frutiger", 21))
label_1.place(x=100, y=100)

values = ["80", "150", "180", "250"]

drop_down = ctk.CTkComboBox(root, values=values, border_color = "#0072CE", font=("Frutiger", 21),
                            button_color = "#005EB8")
drop_down.place(x=220, y=100)

output_var = StringVar()

label_2 = ctk.CTkLabel(root, text = "Output:", font=("Frutiger", 21))
label_2.place(x=100, y=200)

output = ctk.CTkLabel(root, font=("Frutiger", 21), textvariable=output_var)
output.place(x=200, y=200)


def calculate_output(event):
    drop_value = drop_down.get()
    try:
        if drop_value == "80":
            output_var.set("None")
        elif drop_value == "150":
            output_var.set("Aluminium")
        elif drop_value == "180":
            output_var.set("Copper")
        elif drop_value == "250":
            output_var.set("Tin")
    except ValueError:
        output_var.set("Invalid input")


drop_down.bind("<<ComboboxSelected>>", calculate_output)

root.mainloop()

введите сюда описание изображения

Я пробовал редактировать функцию и привязку, но понятия не имею, в чем проблема. Помощь будет оценена по достоинству.

Поставьте print(repr(drop_value)) в calculate_output(), чтобы вы могли точно сказать, что считывается из поля со списком — может быть, значения в конечном итоге оказываются целыми числами? Обратите внимание, что ваш блок except ValueError: никогда не будет выполнен, в блоке try нет ничего, что могло бы вызвать такую ​​ошибку.

jasonharper 10.07.2024 16:22
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
56
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать параметр commandCTkComboBox, чтобы связать его с вашей функцией как таковой:

drop_down = ctk.CTkComboBox(root, values=values, border_color = "#0072CE", font=("Frutiger", 21), button_color = "#005EB8", command=calculate_output)

Таким образом, функция будет выполняться каждый раз, когда вы выбираете новое значение. Также обязательно определите функцию, прежде чем связывать ее с полем со списком. Ваш окончательный код будет выглядеть так:

from tkinter import StringVar

import customtkinter as ctk

root = ctk.CTk()
root.title("Window")
root.geometry("400x300")

label_1 = ctk.CTkLabel(root, text = "Value:", font=("Frutiger", 21))
label_1.place(x=100, y=100)

values = ["80", "150", "180", "250"]

output_var = StringVar()

label_2 = ctk.CTkLabel(root, text = "Output:", font=("Frutiger", 21))
label_2.place(x=100, y=200)

output = ctk.CTkLabel(root, font=("Frutiger", 21), textvariable=output_var)
output.place(x=200, y=200)


def calculate_output(event):
    drop_value = drop_down.get()
    try:
        if drop_value == "80":
            output_var.set("None")
        elif drop_value == "150":
            output_var.set("Aluminium")
        elif drop_value == "180":
            output_var.set("Copper")
        elif drop_value == "250":
            output_var.set("Tin")
    except ValueError:
        output_var.set("Invalid input")

drop_down = ctk.CTkComboBox(root, values=values, border_color = "#0072CE", font=("Frutiger", 21),
                            button_color = "#005EB8", command=calculate_output)
drop_down.place(x=220, y=100)

root.mainloop()

Обратите внимание, что обратный вызов для опции command из CTkComboBox ожидает аргумент, выбранное значение, поэтому нет необходимости вызывать drop_value = drop_down.get(). Просто измените аргумент event на drop_value.

acw1668 10.07.2024 17:22

Я пытаюсь изменить значение метки customtkinter в зависимости от значения, выбранного в поле со списком. Текстовая переменная для выходные данные должны измениться для значений в Calculate_output функция, выходная метка не меняется.

Проблема может быть решена.

Подключение его к функции обратного вызова для печати выбранной опции при событии щелчка.

drop_down.configure(command=calculate_output) # <== add this
drop_down.bind("<<ComboboxSelected>>", calculate_output)

root.mainloop()

Скриншот:

Другие вопросы по теме