2017-02-15 3 views
0

私はGTKヘッダが好きです。しかし、私はそれを使用すると、プロセス中にウィンドウを移動することはできません。ヘッダーバーが私のウィンドウをフリーズするのを防ぐ良い方法は何ですか?プロセス中にヘッダバー付きのPython GTK3ウィンドウを移動する

よろしく

例コード:

#!/usr/bin/env python 
#-*- coding: utf-8 -*- 

import gi 
gi.require_version('Gtk', '3.0') 
from gi.repository import Gtk 

import time 


class MyWindow(Gtk.Window): 

    def __init__(self): 
     Gtk.Window.__init__(self, title="HeaderBarTest") 
     self.connect("destroy", lambda w: Gtk.main_quit()) 
     self.set_position(Gtk.WindowPosition.CENTER) 
     self.set_default_size(300, 300) 
     self.set_border_width(20) 

     # header bar 
     if True: 
      hb = Gtk.HeaderBar() 
      hb.set_show_close_button(True) 
      hb.props.title = "HeaderBarTest" 
      self.set_titlebar(hb) 

     self.box = Gtk.Box(spacing=6) 
     self.add(self.box) 

     self.button = Gtk.Button(label="Sleep") 
     self.box.pack_start(self.button, True, True, 0) 
     self.button.connect("clicked", self.sleep_function) 

     self.show_all() 
     Gtk.main() 

    def sleep_function(self, widget=None): 
     time.sleep(10) 


if __name__ == "__main__": 
    app = MyWindow() 

編集:

Window freezes after clicking of button in python GTK3

答えて

0

一つの回避策は、マルチプロセッシングを使用することである。

#!/usr/bin/env python 
#-*- coding: utf-8 -*- 

import gi 
gi.require_version('Gtk', '3.0') 
from gi.repository import Gtk 

import time 

from multiprocessing import Process 


class MyWindow(Gtk.Window): 

    def __init__(self): 
     Gtk.Window.__init__(self, title="HeaderBarTest") 
     self.connect("destroy", lambda w: Gtk.main_quit()) 
     self.set_position(Gtk.WindowPosition.CENTER) 
     self.set_default_size(300, 300) 
     self.set_border_width(20) 

     # header bar 
     if True: 
      hb = Gtk.HeaderBar() 
      hb.set_show_close_button(True) 
      hb.props.title = "Convert2Html" 
      self.set_titlebar(hb) 

     self.box = Gtk.Box(spacing=6) 
     self.add(self.box) 

     self.button = Gtk.Button(label="Sleep") 
     self.box.pack_start(self.button, True, True, 0) 
     self.button.connect("clicked", self.on_sleep_button_clicked) 

     self.show_all() 
     Gtk.main() 

    def on_sleep_button_clicked(self, widget): 
     p = Process(target=self.sleep_function) 
     p.start() 

    def sleep_function(self, widget=None): 
     print "start" 
     time.sleep(6) 
     print "end" 

if __name__ == "__main__": 
    app = MyWindow() 
関連する問題