带GTK盒的"For"循环

嗨,
我有不同数量的复选按钮和组合框想要添加到窗口中;然而,当我试图水平放置复选按钮和组合框,然后垂直地对它们逐个进行装箱时,我总是遇到内存故障。如有任何帮助,我们将不胜感激:

选择 | 换行 | 行号
  1.     window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  2.     combobox = gtk.combo_box_new_text()
  3.     box1_vbox = gtk.VBox(False, 2)
  4.     list_vbox = gtk.VBox(True, 6)
  5.     check_hbox = gtk.HBox(True, 6)
  6.     buttons_hbox = gtk.HBox(True, 6)
  7.     title = gtk.Label("Superimpose models")
  8.     for imol in molecule_number_list():
  9.         combobox_name = molecule_name(imol)
  10.         combobox.append_text(combobox_name)
  11.     combobox.connect('changed', sel_ref_mol)
  12.  
  13.     box1_vbox.pack_start(title, False, False)
  14.     box1_vbox.pack_start(combobox, False, False)
  15.  
  16.     box1_vbox.pack_start(check_hbox, False, False)
  17.  
  18.     for imol in molecule_number_list():
  19.         button_name = molecule_name(imol)
  20.         button_imol = gtk.CheckButton(button_name)
  21.         combobox_imol = gtk.combo_box_new_text()
  22.         button_imol.connect("toggled", moving_mol, imol)
  23.         combobox_imol.append_text(combobox_name)
  24.         check_hbox_imol = gtk.HBox(True, 6)
  25.         check_hbox_imol.pack_start(button_imol, False, False)
  26.         check_hbox_imol.pack_start(combobox_imol, False, False)
  27.     #for imol in molecule_number_list():
  28.     box1_vbox.pack_start(check_hbox_imol, False, False)
  29.     ok_button = gtk.Button("   Go!  ")
  30.     cancel_button = gtk.Button("    Cancel    ")
  31.     cancel_button.connect("clicked", delete_event)
  32.  
  33.  
  34.     buttons_hbox.pack_start(ok_button, False, False)
  35.     buttons_hbox.pack_start(cancel_button, False, False)
  36.     box1_vbox.pack_start(buttons_hbox, False, False)
  37.  
  38.     window.add(box1_vbox)
  39.  
  40.     window.show_all()
  41.  

谢谢!

# 回答1


Python没有内存故障AFAIK,因此请发布包括有问题的行的整个错误消息。在您发布的代码片段中,在for()循环之前没有声明分子编号列表和分子名称,因此可能是问题所在,也可能不是。
您还应该使用ComboBoxText而不是COMBO_BOX_NEW_TEXT(),后者已弃用。尝试在创建小工具时打印分子数据,因为数据本身可能已损坏。显然,如果没有一些测试数据,我们无法对此进行测试,因此这也会有所帮助。

选择 | 换行 | 行号
  1.     for imol in molecule_number_list():
  2.          combobox_name = molecule_name(imol)  ## <----- not declared 
# 回答2


谢谢你的回复。诀窍是将"combox.Connect('Changed',sel_ref_mol)"放入for循环。

标签: python

添加新评论