Python 3.x 如何从使用Glade生成的Python3/PyGObject正确运行对话框

Python 3.x 如何从使用Glade生成的Python3/PyGObject正确运行对话框,python-3.x,dialog,window,pygtk,pygobject,Python 3.x,Dialog,Window,Pygtk,Pygobject,我在使用Glade界面设计器从Python3/PyGObject运行对话框窗口时遇到问题。信号连接不正确,因为我在尝试运行此脚本时遇到此错误: AttributeError:未找到处理程序按钮\u单击\u对话框 此外,我不知道在哪里可以设置临时父窗口: Gtk消息:映射的GtkDialog没有临时父级。这是 气馁 这是我的林间空地档案: 这是我的Python3/PyGObject文件: #!/usr/bin/env python3 # Gtk imports import gi gi.req

我在使用Glade界面设计器从Python3/PyGObject运行对话框窗口时遇到问题。信号连接不正确,因为我在尝试运行此脚本时遇到此错误:

AttributeError:未找到处理程序按钮\u单击\u对话框

此外,我不知道在哪里可以设置临时父窗口:

Gtk消息:映射的GtkDialog没有临时父级。这是 气馁

这是我的林间空地档案:

这是我的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()
有人能帮我理解如何调用/运行/销毁我的对话框吗?我该如何连接信号

AttributeError:未找到处理程序按钮\u单击\u对话框

问题在于,此处将两个类连接到同一个生成器对象:

builder.connect_signals(ButtonWindow())
builder.connect_signals(ButtonDialog())
因此,您可以将
按钮\u click\u dialog
函数移动到
按钮窗口
类中,或者将对话框保存在单独的文件中


Gtk消息:映射的GtkDialog没有临时父级。这是令人沮丧的

例如,当单击按钮时,您可以为调用
set\u transient\u

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()
也可能有意义,以防您希望能够多次调用该对话框,而不是只调用一次

AttributeError:未找到处理程序按钮\u单击\u对话框

问题在于,此处将两个类连接到同一个生成器对象:

builder.connect_signals(ButtonWindow())
builder.connect_signals(ButtonDialog())
因此,您可以将
按钮\u click\u dialog
函数移动到
按钮窗口
类中,或者将对话框保存在单独的文件中


Gtk消息:映射的GtkDialog没有临时父级。这是令人沮丧的

例如,当单击按钮时,您可以为
调用
set\u transient\u

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()。我非常有兴趣将这两个文件分开。问题是,正如你所解释的,我试过了,但我没有弄对。你能帮我修一下吗?windowwindow.py:windowdialog.py:windowtest.glade:未更改。将窗口和对话框放在两个单独的glade文件中确定。既然对话框位于一个单独的文件中,那么如何导入、实例化和运行对话框?我有和以前一样的.py文件。谢谢你的回答,elya5。我非常有兴趣将这两个文件分开。问题是,正如你所解释的,我试过了,但我没有弄对。你能帮我修一下吗?windowwindow.py:windowdialog.py:windowtest.glade:未更改。将窗口和对话框放在两个单独的glade文件中确定。既然对话框位于一个单独的文件中,那么如何导入、实例化和运行对话框?我有与以前相同的.py文件。