Изменение значений TTK.comBobox с помощью TTK.Radiobuttons - Python

StackOverflow https://stackoverflow.com//questions/21056160

  •  22-12-2019
  •  | 
  •  

Вопрос

def alarmIDList(self, alarms):
        carAlarmIDs = []
        houseAlarmIDs = []
        alarmIDs = []
        listDefault = StringVar()
        listDefault.set("Select ID")

        for alarm in alarms:
            alarmIDs.append(alarm.getID())
            if isinstance(alarm, CarAlarm):
                carAlarmIDs.append(alarm.getID())
            elif isinstance(alarm, HouseAlarm):
                houseAlarmIDs.append(alarm.getID())

        self.alarmType = StringVar()
        self.alarmType.set("alarmIDs")
        allAlarms = ttk.Radiobutton(self.master, text="All", variable=self.alarmType,
                                    value="alarmIDs").place(x=10, y=30)
        carAlarms = ttk.Radiobutton(self.master, text="Car Alarms", variable=self.alarmType,
                                    value="carAlarmIDs").place(x=10, y=50)
        houseAlarms = ttk.Radiobutton(self.master, text="House Alarms", variable=self.alarmType,
                                    value="houseAlarmIDs").place(x=10, y=70)

        cbox = ttk.Combobox(self.master, textvariable=listDefault,
                            state='readonly', height=10, width=10)

        if self.alarmType.get() == "alarmIDs":
            cbox['values'] = alarmIDs
        elif self.alarmType.get() == "carAlarmIDs":
            cbox['values'] = carAlarmIDs
        elif self.alarmType.get() == "houseAlarmIDs":
            cbox['values'] = houseAlarmIDs

        cbox.place(x = 120, y = 75)
.

Это то, что у меня до сих пор, я думаю, мне, вероятно, нужно будет поставить его в цикл или что-то для этого, чтобы изменить значения, но я не знаю, как я это сделал.Я пытался сделать это в течение длительного времени, поэтому любая помощь будет удивительной.Спасибо

Это было полезно?

Решение

Я смог решить эту проблему, предоставив команды радиообуттонами:

def allAlarms():
    listDefault.set("Select ID")
    cbox['values'] = alarmIDs
def carAlarms():
    listDefault.set("Select ID")
    cbox['values'] = carAlarmIDs
def houseAlarms():
    listDefault.set("Select ID")
    cbox['values'] = houseAlarmIDs

allAlarms = ttk.Radiobutton(self.master, text="All", variable=self.alarmType,
                            value="alarmIDs", command=allAlarms).place(x=10, y=30)

carAlarms = ttk.Radiobutton(self.master, text="Car Alarms", variable=self.alarmType,
                            value="carAlarmIDs", command=carAlarms).place(x=10, y=50)

houseAlarms = ttk.Radiobutton(self.master, text="House Alarms", variable=self.alarmType,
                              value="houseAlarmIDs", command=houseAlarms).place(x=10, y=70)
.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top