teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

コードを質問のコードに変更(該当箇所のみ)

2021/10/27 02:32

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -8,25 +8,38 @@
8
8
  他のエラーの場合は、質問文にエラーメッセージを記載してください。
9
9
 
10
10
  ----
11
- グローバル変数の使いかた(概要のみ)
11
+ グローバル変数の使いかた
12
12
 
13
13
  ```python
14
+
14
15
  #1 関数の外で初期化
15
16
  evince_GO = None
16
17
 
17
18
  #2 各関数内でグローバル宣言
18
19
  # 変数に対して = で直接「代入」を行う関数でのみ宣言
19
20
  # 参照のみの場合は不要です。
21
+
20
- def XXX():
22
+ def STR_procss (event):
21
23
  global evince_GO
22
24
 
23
- #3 利用前に Noneである事を確認
25
+ #3 利用前に Noneである事を確認
24
- if not evince_GO: # 既に evince_GO がある場合、多重起動を防ぎます
26
+ # 既に evince_GO がある場合、多重起動を防ぎます
25
- evince_GO = subprocess.Popen(...)
27
+ if not evince_GO:
26
28
 
27
- #4 利用後後始末
29
+ # XXX: グローバル変数とは別問題ですが、Popenの引数はリストします。
30
+ # 注意点 ("evince") はタプルにはなりません。末尾にカンマが必要です。
31
+ # https://docs.python.org/ja/3/library/subprocess.html#subprocess.Popen
28
- if evince_GO:
32
+ path = ["evince"]
29
- evince_GO.kill()
30
- evince_GO = None
31
33
 
34
+ evince_GO = subprocess.Popen(path)
35
+
36
+ def END_procss(event):
37
+ global evince_GO
38
+
39
+ #4 利用後に後始末
40
+ if evince_GO:
41
+ print("end")
42
+ evince_GO.kill()
43
+ evince_GO = None
44
+
32
45
  ```

1

コードを追記

2021/10/27 02:32

投稿

teamikl
teamikl

スコア8817

answer CHANGED
@@ -5,4 +5,28 @@
5
5
  NameError: name 'evince_GO' is not defined と出る場合は、
6
6
  STR_procss 関数内で global 宣言で対応できます。
7
7
 
8
- 他のエラーの場合は、質問文にエラーメッセージを記載してください。
8
+ 他のエラーの場合は、質問文にエラーメッセージを記載してください。
9
+
10
+ ----
11
+ グローバル変数の使いかた(概要のみ)
12
+
13
+ ```python
14
+ #1 関数の外で初期化
15
+ evince_GO = None
16
+
17
+ #2 各関数内でグローバル宣言
18
+ # 変数に対して = で直接「代入」を行う関数でのみ宣言
19
+ # 参照のみの場合は不要です。
20
+ def XXX():
21
+ global evince_GO
22
+
23
+ #3 利用前に Noneである事を確認
24
+ if not evince_GO: # 既に evince_GO がある場合、多重起動を防ぎます
25
+ evince_GO = subprocess.Popen(...)
26
+
27
+ #4 利用後に後始末
28
+ if evince_GO:
29
+ evince_GO.kill()
30
+ evince_GO = None
31
+
32
+ ```