我无法使用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()
有人可以帮我理解如何调用/运行/销毁我的对话框吗?我该如何连接信号?
答案 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()
也可能有意义。