Вы можете сделать это, используя BehaviorSubject, который имеет понятие «текущее значение». Он сохраняет последнее значение, которое исходит от его потребителей, и всякий раз, когда подписывается новый Observer, он сразу получает «текущее значение» из BehaviorSubject.
Создает отдельный сервис для данных о количестве.
service.ts
//set the initial value here
amount=new BehaviorSubject(0);
component.ts
ChangeDetectorRef
Что это означает, если есть случай, когда любая вещь внутри вашей модели (например, ваш класс) изменился, но он не отразил представление, вам может потребоваться уведомить Angular, чтобы обнаружить эти изменения (обнаружить локальные изменения) и обновить представление.
constructor(private ref: ChangeDetectorRef,subj:SubjectService) { subj.amount.subscribe((data)=>{ this.amount=data; this.myString = `Hello, you have ${this.amount} dollars.`; //check for changes then it will update the view this.ref.markForCheck(); }) setTimeout(() => { //change amount data after 1 second subj.amount.next(40); }, 1000); }
пример здесь : https://stackblitz.com/edit/changedetection-using-subject?file=src%2Fapp%2Fapp.component.ts
Версия ttk
, которую вы использовали ранее, добавляет функциональность галочки по умолчанию, и на выбранном элементе появляется галочка. Однако, когда вы вручную добавляете элементы, вам нужно будет использовать метод add_radiobutton
вместо add_command
. Это то, что позволяет поставить галочку (в версиях tk
и ttk
).
import tkinter.tkk as tkk
def __init__(self, *args, **kwargs):
...
self.om = ttk.OptionMenu(self, self.om_variable)
...
def _reset_option_menu(self, options, index=None):
...
menu.add_radiobutton(
label=string,
command=tk._setit(self.om_variable, string)
)
...