Python:条目Window有时不会死

Python: Entry Window sometimes will not die

我遇到了这个奇怪的间歇性问题,弹出对话框要求用户输入 URL 并按回车键。大约一半的时间,用户按 Enter 键没有响应。对于相同的输入数据,它可以连续发生两次,然后第三次使用相同的输入。重新启动应用程序并没有真正改变行为。我正在尝试使用 PyCharm 使用断点和监视来调试它,但我无法让它正确地进入函数。

管理用户输入的两个函数如下:

def on_click_pic(self, button, null):
    self.url_win = Gtk.Window()
    self.url_win.set_default_size(500,20)
    self.url_win.set_border_width(10)
    self.url_win.set_title("Enter a URL for the player photo")
    self.url_win.add(self.url_entry)
    self.url_win.show_all()

def on_url_enter(self, event):
    search = self.url_entry.get_text()
    self.url_win.destroy()
    print "getting image: %s " % search
    self.get_image(search, self.e_image)
    self.e_pic = search
    print "e_pic set to %s" % search

当用户单击固定到事件框的 GTKImage 时触发第一个函数。这部分总是有效。第二个是通过输入框的连接激活的,该输入框主要由

调用
self.url_entry.connect("activate", self.on_url_enter)

好像这个连接函数只被调用了大约一半的时间,因为 on_url_enter 没有出现在 运行 其余时间。我已经尝试检查我的步骤以查看输入框是否失去焦点但没有任何问题。还有什么我应该寻找的,或者是否有更可靠的编码方式,也许是通过制作输入框的模态 class?

问题是您在 __init__ 方法中定义了 self.url_entry = Gtk.Entry()。这导致了您描述的行为。您可以只使用:

def on_click_pic(self, button, event):
    self.url_win = Gtk.Window()
    self.url_win.set_default_size(500,20)
    self.url_win.set_border_width(10)
    self.url_win.set_title("Enter a URL for the player photo")
    url_entry = Gtk.Entry()  # define your GtkEntry here
    url_entry.connect('activate', self.on_url_enter)
    self.url_win.add(url_entry)
    self.url_win.show_all()

def on_url_enter(self, url_entry):
    search = url_entry.get_text()
    self.url_win.destroy()
    print "getting image: %s " % search
    self.get_image(search, self.e_image)
    self.e_pic = search
    print "e_pic set to %s" % search