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