试图消除python3 Gtk3错误消息

时间:2016-11-21 15:51:08

标签: python-3.x gtk3 linuxmint

当我运行此脚本时:

#!/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。

2 个答案:

答案 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))

无论如何,这两种表单都没有错误!