[英]Changing values of a ttk.Combobox by using ttk.Radiobuttons - Python
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)
這是我到目前為止所做的,我想我可能需要把它放在一個循環或其他東西,它來改變價值但我不知道我會怎么做。 我一直在努力做這個很長一段時間,所以任何幫助都會很棒。 謝謝
我能夠通過向Radiobuttons發出命令來解決這個問題:
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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.