最近私はプロセスで遊び始めました。いくつかのものを試してみるために、私は非常にシンプルなGUIを書き、以下について考えた:パイプを使ってTkinterとStringVarを送る
- ありラベルであり、ボタンがクリックされた場合、ボタン
- は、プロセスがチェックする、それに応じてラベルを編集します。これを行うには
、私はそれを送り返し、その後、それを編集し、パイプを通して他のプロセスにSTRINGVARを送信しようとしました。関連するコードは以下の通りです:
def changeText(pipe1, pipe2, str):
while 1:
if pipe1[1].recv() == "a":
print("received")
str.set("clicked")
pipe2[0].send(str)
else:
pass
def buttonClicked(pipe):
pipe[0].send("a")
txt2go = tk.StringVar(master=root, value="not clicked")
btn1 = tk.Button(text = "go", command = lambda : buttonClicked(pipe1))
btn1.place(x=50, y=80)
proses1 = mp.Process(target=changeText, args=(pipe1, pipe2, txt2go))
proses1.start()
しかしプログラムは、(私はSTRINGVARを受信しようとした前であっても)次のような出力が得られます。
Process Process-1:
received
Traceback (most recent call last):
File "/usr/lib/python3.5/multiprocessing/process.py", line 249, in _bootstrap
self.run()
File "/usr/lib/python3.5/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "/home/cetin/PycharmProjects/Process_deneme_PC /Process_deneme_pc.py", line 9, in changeText
pipe2[0].send(str)
File "/usr/lib/python3.5/multiprocessing/connection.py", line 206, in send
self._send_bytes(ForkingPickler.dumps(obj))
File "/usr/lib/python3.5/multiprocessing/reduction.py", line 50, in dumps
cls(buf, protocol).dump(obj)
_pickle.PicklingError: Can't pickle <class '_tkinter.tkapp'>: attribute lookup tkapp on _tkinter failed
それが何を意味する、とあなたは回避策を提案することができますか?
ラベルの内容を更新するには何かできますか?任意の回避策? –
@ChatinKöktürk:回避策は、文字列の値を前後に渡すことです。 –
ええ、これを前後に通過させると、この目的にどのように役立つのでしょうか?あなたは少なくとも疑似コードを投稿できますか? –