需要一些帮助,请解释为什么以下不起作用。 环境:Python 3.4,Gtk3.0,Python的经验有限 文件selectcontact.py包含用于选择多个记录之一并将其密钥传递回其父进程的代码,以便在至少三个其他操作之一中使用。
父类的代码段:
….
self.cindex = 0
….
def editcontact_clicked (self, menuitem):
import selectcontact
selectcontact.SelectContactGUI(self)
print ('From Manage ', self.cindex)
if self.cindex > 0:
import editcontact
editcontact.EditContactGUI(self.db, self.cindex)
...
selectcontact的代码段: class SelectContactGUI: def init (self,parent_class):
self.builder = Gtk.Builder()
self.builder.add_from_file(UI_FILE)
self.builder.connect_signals(self)
self.parent_class = parent_class
self.db = parent_class.db
self.cursor = self.db.cursor(cursor_factory = psycopg2.extras.NamedTupleCursor)
self.contact_store = self.builder.get_object('contact_store')
self.window = self.builder.get_object('window1')
self.window.show_all()
def select_contact_path(self, path):
self.builder.get_object('treeview_selection1').select_path(path)
def contact_treerow_changed (self, treeview):
selection = self.builder.get_object('treeview_selection1')
model, path = selection.get_selected()
if path != None:
self.parent_class.cindex = model[path][0]
print ('From select ', self.parent_class.cindex)
self.window.destroy()
...
window1被声明为“模态”,所以我期待调用selectcontact作为子例程,这样在将控件传递回父节点之前不会调用editcontact。 parent_class位有效,因为contact_store已正确填充。但是,返回到父级的传输似乎不起作用,并且两个打印语句的顺序错误: 来自Manage 0 从选择2 感激地收到了评论。 格雷姆
答案 0 :(得分:0)
"模态"仅指窗户。也就是说,模态窗口阻止访问父窗口。
它与正在运行的代码几乎没有关系。我不熟悉这个特定的窗口框架,但我使用的任何一个都有一个单独的GUI线程,至少一个用于处理,保持GUI响应,并在所有活动窗口中运行消息循环,而不仅仅是当前的一个重点突出。模态对话框无法控制在执行其他线程时执行的代码。
您应该能够在任何给定时间进入调试器并查看正在运行的线程以及每个线程中正在运行的内容。