GtkAboutDialog关闭按钮错误

1 投票
3 回答
1228 浏览
提问于 2025-04-16 05:23

我在使用GtkAboutDialog的时候,其他功能都正常,只有这个窗口的关闭按钮不工作。其他按钮都能正常使用,我也不知道为什么,所有按钮都有默认的回调函数,能创建和销毁窗口。但是,GtkAboutDialog的“关闭”按钮却不见了,我甚至看不到这个按钮的控件。那么,我能找到它吗?

[澄清] 你看到的是gtk.AboutDialog——一个弹出窗口,用来显示应用程序的信息(在PyGTK 2.6中新增)。这个窗口里有一个“关闭”按钮控件,它被放在一个GtkHButtonBox控件里。对于我来说,GtkHButtonBox是我能接触到的最高级别的控件。有没有什么办法可以找到“关闭”按钮,并为它连接一个回调信号的处理函数呢?

alt text

3 个回答

1

这个问题虽然比较老,但因为在谷歌搜索中排得靠前,我想分享一下我找到的解决方案。你需要一个事件处理器来显示关于对话框,另一个来关闭它。第一个处理器通常会和你的帮助菜单中的“关于”选项连接,使用的是activate信号。第二个处理器则应该连接到关于对话框的response信号。这两个处理器大概是这样的:

def on_menuitemHelpAbout_activate(self, *args):
    self.builder.get_object('aboutdialog').show()
def on_aboutdialog_response(self, *args):
    self.builder.get_object('aboutdialog').hide()

在上面的例子中,我使用GtkBuilder来找到我的关于对话框,因为我是用glade构建的界面。注意,我使用.show()而不是.run(),因为我觉得没有必要让程序暂停,直到对话框关闭。最后,响应处理器可以根据用户的选择采取不同的行动,但在这里我就不考虑这个了。

1

gtk.AboutDialog其实就是一个普通的对话框gtk.Dialog,你处理它的响应方式和处理其他对话框一样。不同的是,你不需要自己去连接按钮的点击事件,因为对话框的代码会帮你处理这些事情,并通过你调用的run()方法返回一个响应。你可以检查这个返回的响应值,来判断用户点击了哪个按钮。

如果你想要改变某些行为,可以连接到gtk.Dialogresponse信号。

1

对话框的信号连接方式和窗口是不一样的。我在学习PyGTK的时候也犯过同样的错误。

对话框最基本的使用方式是通过以下代码来显示和运行:

aboutdialog.run()

通常你接下来会立即调用:

aboutdialog.destroy()

.run()这一行是一个循环,它会一直运行,直到对话框里发生某些事情。

这里有一个可以参考的示例

撰写回答