Я впервые использую 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()
введите сюда описание изображения
Я пробовал редактировать функцию и привязку, но понятия не имею, в чем проблема. Помощь будет оценена по достоинству.
Вы можете использовать параметр command
CTkComboBox
, чтобы связать его с вашей функцией как таковой:
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
.
Я пытаюсь изменить значение метки customtkinter в зависимости от значения, выбранного в поле со списком. Текстовая переменная для выходные данные должны измениться для значений в Calculate_output функция, выходная метка не меняется.
Проблема может быть решена.
Подключение его к функции обратного вызова для печати выбранной опции при событии щелчка.
drop_down.configure(command=calculate_output) # <== add this
drop_down.bind("<<ComboboxSelected>>", calculate_output)
root.mainloop()
Скриншот:
Поставьте
print(repr(drop_value))
вcalculate_output()
, чтобы вы могли точно сказать, что считывается из поля со списком — может быть, значения в конечном итоге оказываются целыми числами? Обратите внимание, что ваш блокexcept ValueError:
никогда не будет выполнен, в блокеtry
нет ничего, что могло бы вызвать такую ошибку.