後に小文字を区別しないための変更ボタンの下に私のテストコードに見てみてください。のpython3 GTK3 - すぐクリック
import time
import subprocess
import os,re
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="test")
self.set_default_size(400, 190)
self.set_border_width(10)
fixed = Gtk.Fixed()
self.add(fixed)
self.button2 = Gtk.Button(label='press')
self.button2.connect("clicked", self.aaabbb)
self.button2.set_size_request(100, 20)
fixed.put(self.button2, 170, 10)
def aaabbb(self,widget):
self.button2.set_sensitive(False)
p = subprocess.run(['/bin/bash','-c', '/bin/sleep 5'])
print(p.returncode)
window = MyWindow()
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()
あなたはこの単純なアプリケーションを実行する場合は、そのボタンがサブプロセスの後、わずか5秒後に無効になりますわかります"sleep 5"を終了します。
質問 - サブプロセスを開始する前にボタンを非表示にする方法はありますか?
は、サブプロセスの呼び出しが結果としてメインループとユーザーインターフェースの非同期およびブロックではないので起こることを事前
"マルチプロセッシング"を使うことができます – user1078796
おそらくサブプロセスからgtkメソッドを呼び出さないと問題はありません。あなたがメインループと通信したいとき、ストレスが発生します。パイプには問題があります。「2つのプロセス(またはスレッド)が同時にパイプの同じ端部を読み書きしようとすると、パイプ内のデータが壊れる可能性があることに注意してください。」キューは「スレッドとプロセスセーフ非同期呼び出しでなければならないことを忘れないでください。とにかく、私はあなたが問題を分離することをお勧めします。マルチプロセッシングを使用する特定の理由がない限り、GLibのtrhread /スレッドプールと非同期キューを試してみてください。 –