tkinter ttk OptionMenu теряет выделение галочкой при обновлении списка опций

Вы можете сделать это, используя 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

0
задан azazelspeaks 18 January 2019 в 22:35
поделиться

1 ответ

Версия 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)
    )
    ...

enter image description here

0
ответ дан busybear 18 January 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: