Python GTK ComboBox -如何在删除最后一项时清除对话框

d7v8vwbk  于 2023-07-01  发布在  Python
关注(0)|答案(1)|浏览(147)

我使用下面的命令来删除一个ComboBox项目,使用Ctrl-X。这几乎可以工作,但当最后一个条目被删除时,它仍然可见,直到我发出额外的Ctrl-X。

  1. def on_key(self, widget, event, combo):
  2. if event.state & Gdk.ModifierType.CONTROL_MASK and event.keyval == 120:
  3. tree_iter = combo.get_active_iter()
  4. if tree_iter is None:
  5. combo.grab_focus()
  6. self.hist_store.append([0, ""])
  7. self.hist_combo.set_active(0)
  8. return
  9. else:
  10. self.hist_store.remove(tree_iter)
  11. self.hist_combo.set_active(0)
  12. return
wdebmtf2

wdebmtf21#

我找不到一种方法来动态更新ComboBox中显示的文本。我的解决方案是一个组装;在列表存储中始终保持一个空行,如果所有元素都已删除,则使其处于活动状态。将历史记录写入文件时,忽略空行。如果有人有更好的解决方案,请提交。

  1. def on_key(self, widget, event):
  2. self.empty_row = 0
  3. for row in self.hist_store:
  4. self.empty_row += 1
  5. if event.state & Gdk.ModifierType.CONTROL_MASK and event.keyval == 120:
  6. tree_iter = self.hist_combo.get_active_iter()
  7. if tree_iter is None:
  8. self.hist_combo.set_active(self.empty_row)
  9. return
  10. else:
  11. self.hist_store.append([self.empty_row, ""])
  12. self.hist_store.remove(tree_iter)
  13. self.hist_combo.set_active(0)
  14. return
  15. def hist_dump(self):
  16. os.remove(self.hist_file)
  17. self.hist_file = create_history()
  18. for rows in self.hist_store:
  19. row=list(rows[:])
  20. if row[1] == "":
  21. continue
  22. line = row[1] + "\n"
  23. with open(self.hist_file, "a") as fh:
  24. fh.write(line)
展开查看全部

相关问题