3

私は次のスクリプトを持っていますclip-test.py

#!/usr/bin/python

import gtk

gtk.Clipboard().set_text("exciting clipboard contents")
gtk.Clipboard().set_can_store(None) # not sure if these last two lines are useful
gtk.Clipboard().store()

私がこのように実行すると:

python clip-test.py

動作しません。クリップボードは変更されていません。インタラクティブモードで実行し、プロセスを終了させないことで、問題を解明できます。

python -i clip-test.py

インタラクティブモードを終了する前に、どこかに貼り付けてみてください。クリップボードが変更されました。できます。Pythonを閉じると、クリップボードは以前の状態に戻ります。

displayこれは、コードがデフォルトでアクセスしているクリップボードと関係があると考えられていましたがselection、これらのパラメーターを変更しようとしましたが、それでも機能しません。

私はPython2.7.3とpython-gtk22.24.0-3build1を使用しており、Kubuntu13.04を実行しています。

何が得られますか?

4

1 に答える 1

8

これはGTKまたはPyGTKの問題ではありませんが、X11のコピーと貼り付けがどのように機能するかの結果です。X11アプリケーションを押す^Cと、まだ実際には何もコピーされていません。後で使用できるようにデータを記憶するようにアプリケーションに指示しただけです。「貼り付け」が開始された場合にのみ、データは貼り付け者に送信されます。これにより、リソースが節約され、コピー機と貼り付け機が最適なデータ転送形式をネゴシエートできるようになります。これは、ジェイミー・ザウィンスキーによる古典的なテキストで詳細に説明されています。

最新のデスクトップ環境はクリップボードの内容を保持しようとしますが、メインループに入り、クリップボードマネージャーがクリップボードの内容を取得するのに十分な時間そのループに留まる必要があります。

#!/usr/bin/python

import gtk, gobject

gtk.Clipboard().set_text("exciting clipboard contents")
gobject.timeout_add(100, gtk.main_quit)
gtk.main()

そしてset_can_store()store()プロセスをスピードアップできるはずです。いくつかのグーグルは、プログラムがそれらを使用してクリップボードデータを破棄ハンドラーに保存していることを示しました。なぜそれがうまくいかないのかは明らかではありません—おそらくあなたはset_can_store([("UTF8_STRING", 0, 0)])の代わりに電話をかけるべきですset_can_store(None)

于 2013-03-06T09:10:17.580 に答える