2016-11-21 4 views
0

のpython3 Gtk3エラーメッセージを排除しようとすると:私はこのスクリプトを実行すると

のGtk-のメッセージ:ウィンドウ内のいずれかのボタンをクリックしたときに、私は、このエラーメッセージが表示されます

#!/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() 

をGtkDialogがマッピングされました一時的な親なし。これは です。 messagedialog.set_parent(ウィンドウ)文をコメント解除

は、このメッセージを追加します。

のGtk-WARNING **は:トップレベルウィジェットに

何をして親を設定できません。私はこれらのメッセージを排除するためにやらなければならないのですか?

私はLinux Mint 18 Mateを使用しています。 MessageDialog書にparent=windowを追加してどのような作品

答えて

1

messagedialog = Gtk.MessageDialog(message_format="MessageDialog", parent=window) 

set_parent文が無効である理由私はまだ知りません。ここで

+0

'set_parent'によって設定される" parent(widget) "は、' MessageDialog'コンストラクタの引数として与えられる "transient parent"とは異なるものです。 – ptomato

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

とにかく、どちらのフォームもエラーなし!

関連する問題