如何正确运行使用Glade

时间:2017-02-20 16:55:26

标签: python-3.x dialog window pygtk pygobject

我无法使用Glade界面设计器从Python3 / PyGObject运行对话窗口。由于我在尝试运行此脚本时出现此错误,因此信号未正确连接:

  

AttributeError:找不到处理程序button_click_dialog

另外,我不知道在哪里可以设置我的瞬态父窗口:

  

Gtk-Message:GtkDialog映射没有临时父代。这是   气馁。

这是我的林间文件: http://pastebin.com/yKz3P58s

这是我的Python3 / PyGObject文件:

#!/usr/bin/env python3

# Gtk imports
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

# Initialize Gtk builder and import UI
builder = Gtk.Builder()
builder.add_from_file("windowtest.glade")

# Get objects from builder
window = builder.get_object("ButtonWindow")
dialog = builder.get_object("ButtonDialog")

class ButtonWindow:

  def on_delete_window(self, *args):
    Gtk.main_quit(*args)

  def button_click_window(self, widget):
    print("button_click_window")
    response = dialog.run()
    if response == Gtk.ResponseType.OK:
      print("OK")
    elif response == Gtk.ResponseType.CANCEL:
      print("CANCEL")
    dialog.destroy()


class ButtonDialog:

  def __init__(self):
    print("dialog init")

  def button_click_dialog(self, widget):
    print("button_click_dialog")


# Connect signals
builder.connect_signals(ButtonWindow())
builder.connect_signals(ButtonDialog())

# Show main window
window.show_all()

# Enter main loop
Gtk.main()

有人可以帮我理解如何调用/运行/销毁我的对话框吗?我该如何连接信号?

1 个答案:

答案 0 :(得分:0)

  

AttributeError:找不到处理程序button_click_dialog

问题是你在这里将两个类连接到同一个构建器对象:

builder.connect_signals(ButtonWindow())
builder.connect_signals(ButtonDialog())

因此,您可以将button_click_dialog函数移动到ButtonWindow类,也可以将对话框保存在单独的文件中。

  

Gtk-Message:GtkDialog映射没有临时父代。这是不鼓励的。

例如,点击按钮时,您可以拨打set_transient_for

def button_click_window(self, widget):
    print("button_click_window")
    dialog.set_transient_for(window)
    response = dialog.run()
    if response == Gtk.ResponseType.OK:
        print("OK")
    elif response == Gtk.ResponseType.CANCEL:
        print("CANCEL")
    dialog.destroy()

如果您希望能够多次调用对话框而不是一次调用对话框,从dialog.destroy()切换到dialog.hide()也可能有意义。