【问题标题】:pygtk centering dialog buttonspygtk 居中对话框按钮
【发布时间】:2012-07-20 10:11:55
【问题描述】:

我正在使用 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: 试图将 GtkButton 类型的小部件添加到 GtkAli 类型的容器中 gnment,但小部件已经在 GtkHButtonBox 类型的容器中,http://library.gnome.org/devel/gtk-faq/stable/ 的 GTK+ FAQ 解释了如何重新设置小部件。 align.add(按钮)

【问题讨论】:

    标签: python dialog pygtk


    【解决方案1】:

    正如它所说,问题在于 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 文档确实给了我这样的印象...]

    【讨论】:

      【解决方案2】:

      你走在正确的轨道上;只需在 gtk.Alignment 中移动按钮框 (action_area)。

      像往常一样构建你的对话框,然后添加:

      align_action_area = gtk.Alignment(xalign=0.5, yalign=0.0, xscale=0.0, yscale=0.0)
      dialog.vbox.pack_end(child=align_action_area)
      dialog.action_area.reparent(new_parent=align_action_area)
      dialog.set_default_response(gtk.RESPONSE_OK)
      dialog.show_all()
      

      注意:set_default_response() 必须在 reparent() 之后调用,否则默认激活功能将不起作用。

      在您的代码中,替换:

      align.add(button)
      dlg.vbox.pack_start(align, False, False, 5)
      

      与:

      dlg.vbox.pack_end(child=align, expand=False, fill=False, padding=5)
      dlg.action_area.reparent(new_parent=align)
      dlg.show_all()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-07
        • 2020-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-08
        • 2012-02-16
        • 2013-08-22
        相关资源
        最近更新 更多