当我运行此脚本时:
#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GObject
def display_message_dialog(button, message_type, window):
messagedialog = Gtk.MessageDialog(message_format="MessageDialog")
messagedialog.set_property("message-type", message_type)
# messagedialog.set_parent(window)
messagedialog.run()
messagedialog.destroy()
window = Gtk.Window()
window.connect("destroy", lambda q: Gtk.main_quit())
grid = Gtk.Grid()
grid.set_column_spacing(5)
window.add(grid)
buttonInfo = Gtk.Button(label="Information")
buttonInfo.connect("clicked", display_message_dialog, Gtk.MessageType.INFO, window)
grid.attach(buttonInfo, 0, 0, 1, 1)
buttonError = Gtk.Button(label="Error")
buttonError.connect("clicked", display_message_dialog, Gtk.MessageType.ERROR, window)
grid.attach(buttonError, 3, 0, 1, 1)
window.show_all()
Gtk.main()
单击窗口中的一个按钮时出现此错误消息:
Gtk-Message:GtkDialog映射没有临时父代。这是 气馁。
取消注释 messagedialog.set_parent(window)语句会添加以下消息:
Gtk-WARNING **:无法在顶级小部件上设置父级
如何消除这些消息?
我正在使用Linux Mint 18 Mate。
答案 0 :(得分:1)
将 parent=window
添加到MessageDialog语句中的作用是什么:
messagedialog = Gtk.MessageDialog(message_format="MessageDialog", parent=window)
我仍然不知道为什么set_parent语句无效。
答案 1 :(得分:0)
以下示例适用于parent =
作为属性(如图所示)或您可以删除该属性,并取消注释dlg.set_transient_for(self)
(我相信set_parent
不是正确的函数,因为此处需要的关系是在父窗口关闭时获取事件)
from gi.repository import Gtk
VERSION = "0.1"
class MainWindow(Gtk.Window):
def __init__(self):
super(MainWindow, self).__init__()
self.connect("destroy", lambda x: Gtk.main_quit())
btn = Gtk.Button("Call about dialog")
btn.connect("clicked", self.btn_clicked)
self.add(btn)
self.show_all()
def btn_clicked(self, btn):
dlg = Gtk.AboutDialog(version = VERSION,
program_name = "SomeTest",
parent = self,
license_type = Gtk.License.GPL_3_0)
#dlg.set_transient_for(self)
dlg.run()
dlg.destroy()
def run(self):
Gtk.main()
def main(args):
mainwdw = MainWindow()
mainwdw.run()
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))
无论如何,这两种表单都没有错误!