python - 被破坏的对话框无法正确重新出现

标签 python user-interface pygtk glade

我正在 Python/Glade 中开发 GUI 应用程序,并遇到以下问题。 我试图让“关于”对话框正常工作...但是,当我单击“关闭”(在“关于”对话框中)然后尝试再次打开它时,我看到的就是:

enter image description here

所以,只是窗口的一小部分,以及一个不起作用的关闭按钮。 这是我的 Glade 窗口的类:

# glade object
class MainWindow(object):
  builder_ = None

  # load main window
  def __init__(self):
    handler = {
      "sigWindowDestroy" : gtk.main_quit,
      "sigShowAbout"     : self.show_about
    }

    projfile = "proj.glade"
    self.builder_ = gtk.Builder()
    self.builder_.add_from_file(projfile)
    self.builder_.connect_signals(handler)
    window = self.builder_.get_object("main_window")
    window.show()

  # show about dialog
  def show_about(self, *args):
    dAbout = self.builder_.get_object("dAbout")
    dAbout.run()
    dAbout.destroy()

在我的主要功能中:

  # load glade gui
  app = MainWindow()
  gtk.main()

第二次单击时,我在终端窗口中看到以下输出(使用 Mac OS X)。

GtkWarning: gtk_widget_show: assertion `GTK_IS_WIDGET (widget)' failed
  dAbout.run()
GtkWarning: gtk_label_set_markup: assertion `GTK_IS_LABEL (label)' failed
  dAbout.run()

编辑:抱歉,由于对 PyGTK 不熟悉,必须重新打开。

我使用了 show()/hide() 方法,而不是建议的 run()/destroy() 方法。现在,我正在关注另一篇 SO 帖子,其中突出显示 this tutorial (谁说使用run()/destroy()),并且我看到了这种行为。

首先,“关闭”按钮不执行任何操作。我曾以为出于某种原因它的行为是预先定义的。 其次,使用角关闭按钮关闭对话框仍然提供与上面的 run()/destroy() 相同的行为。


编辑 2:通过添加以下内容解决:

dAbout.connect("response", lambda d, r: d.hide())

最佳答案

不要尝试(深度)复制小部件。正如您所发现的,它不起作用。

相反,hide()对话框而不是destroy()它。

关于python - 被破坏的对话框无法正确重新出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12867116/

相关文章:

android - 如何使 Button 更具响应性?

qt - (Qt)一键单击后无法使用的窗口

python - 是否有 Python PyGTK Pango 编辑器工具栏的示例?

python - 运行过程中进度条不更新

python - 在 python 中使用 nose 进行并行化测试

python - 在windows 10中安装pythonshout模块(python版本3.9)

python - ElementTree : Element. remove() 跳跃迭代

python - session 未创建异常 : Message: session not created: This version of ChromeDriver only supports Chrome version 76 with Selenium ChromeDriver

Jquery hide() 应该只应用于可见元素

python - 调用 gtk.main 后执行函数