Мой первый вопрос, надеюсь, он сформирован разумно. Я пишу графический интерфейс Python tkinter, который будет отображать различные типы данных в соответствии с запросом в ComboBox. Пользователь выберет запись, и диаграмма mapplotlib обновится. Я давний программист, но все еще изучаю базовые Python и объектно-ориентированные подходы.
Боюсь, я не понимаю некоторые основы. Я связал Combobox с функцией, и она отлично работает, но многие примеры в Интернете включают просто «Я здесь». напечатать заявление в этой функции. Но выбор в выпадающем списке повлияет на несколько вещей. Я должен иметь логику неправильно; Я не могу понять, как отформатировать вызов лямбда-функции для передачи диаграммы и виджетов и тому подобного в функцию обратного вызова. Но, кроме того, я не могу себе представить, чтобы основная логика программы хранилась в функции обратного вызова. Но если я сделаю что-то простое в функции обратного вызова, например, сохраню выбор в переменной, мне нужно будет заставить программу выполнять действия даже вне выбора Combobox, что кажется противоречащим стилю, управляемому событиями.
Комбо-бокс работает, и я могу напечатать выделение. Я рассмотрел повторные вызовы time.sleep () или тому подобное, чтобы почувствовать изменяющуюся переменную, но это кажется плохой формой. Я пытался передать класс для обратного вызова, но не знаю формат. Я экспериментировал с combobox.after, но это не кажется подходящим.
from assign_choices import WidgetChoices
def make_chart_page(nb, chartPage, wc, product_choice):
comboValues = []
# Get names for entry into Combobox. This will depend upon the product.
Get_Combo_Entries(wc)
for i in range(len(wc.varList)):
comboValues.append(wc.varList[i][0])
# Add the chooser
comboChart = ttk.Combobox(labelFrameChart, values=comboValues, width=25)
comboChart.pack(anchor="w", padx=5)
comboChart.current(0)
# comboChart.bind("<<ComboboxSelected>>", callback)
# data={"one": 1, "two": 2}
data = wc
comboChart.bind("<<ComboboxSelected>>", lambda event, arg=data: callback(event, arg))
def callback(eventObject, arg):
a_c = eventObject.widget.get()
print("ACTIVE CHART " + a_c)
arg.active_chart = a_c
class WidgetChoices():
def __init__(self):
self.active_product = "POTATOES"
self.active_chart = "Producers"
self.active_map = "POTATOES"
self.varList = []
Этот код находится в середине цикла, я не думаю, что исправление конкретной ошибки было бы полезно. Вместо этого, как мне: 1) сохранить выбор Combobox в классе wc, а затем попросить основную подпрограмму обновить диаграмму, или 2) при необходимости передать все необходимое функции обратного вызова и обновить диаграмму?
Спасибо за вашу помощь,
Randy