Skip to main content
 首页 » 编程设计

python之pygtk 居中对话框按钮

2025年05月04日6zlslch

我正在使用 pygtk 对话框,我添加了一个按钮,现在我想控制按钮的位置。例如将它居中。

这是我的代码:

import pygtk 
pygtk.require('2.0') 
import gtk 
 
dlg = gtk.Dialog('Marker Label') 
dlg.set_size_request(350, 300) 
dlg.show() 
 
entry = gtk.Entry() 
entry.show() 
entry.set_activates_default(gtk.TRUE) 
dlg.vbox.pack_start(entry) 
 
# Create a centering alignment object 
align = gtk.Alignment(0.5, 0.5, 0, 0) 
 
button = dlg.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) 
 
align.add(button) 
dlg.vbox.pack_start(align, False, False, 5) 
dlg.set_default_response(gtk.RESPONSE_OK) 
response = dlg.run() 
 
if response == gtk.RESPONSE_OK: 
    label = entry.get_text() 
    print label 
dlg.destroy() 

我收到这条消息:

test.py:19: GtkWarning: Attempting to add a widget with type GtkButton to a container of type GtkAli gnment, but the widget is already inside a container of type GtkHButtonBox, the GTK+ FAQ at http://library.gnome.org/devel/gtk-faq/stable/ explains how to reparent a widget. align.add(button)

请您参考如下方法:

如其所说,问题在于 dlg.add_button() 返回的按钮已经有一个父级 - 即对话框底部的水平按钮框。

您可以按照常见问题解答 - 在尝试将按钮添加到您的 vbox 之前从 HButtonBox 中删除该按钮。 (提示:无论哪种方式,我真的认为您想在将对话框设置为可见之前完成所有这些操作)。看起来 hbox 被称为“action_area”。也许 dlg.action_area.remove(button)

或者您可以自己创建按钮。不要使用 dlg.add_button(),而是使用 gtk.button_new_from_stock(gtk.STOCK_OK)。

[但我不是 Gtk 程序员,我不知道在这两种情况下事件处理是如何工作的。 IE。我不知道当您按下按钮时,这些中的任何一个是否仍会关闭对话框,或者您是否必须添加更多内容才能做到这一点。 Gtk 文档确实给我这样的印象...]