質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

334閲覧

pythonで1つの変数をボタンで切り返したい。

Suzu9369

総合スコア9

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/08/23 11:42

プログラミングを始めたばかりの初心者です。
初めての質問なのでいろいろと伝わりにくかったりおかしなところがあってすみません...

実現したいこと

dir_path の部分をtkinterで作ったボタンで切り替えたい。

該当のソースコード

Python

1def Test(): 2 directory = Path.home()/dir_path 3 file_type = ('png',) 4 for type in file_type: 5 (Path(directory)/type).mkdir(exist_ok=True) 6 p = Path(directory).glob('*.' + type) 7 for f in p: 8 f.rename(Path(directory)/type/f.name)

試したこと

x = 1の部分をボタンに関連付けた A で0に変更しdir_testの'Downloads'を呼び出そうとしたが上手くいかなかった。
実行すると1で呼び出されるDocumentsで処理が実行されてしまう。

python

1一部抜粋 2 3import tkinter 4from pathlib import Path 5 6~ 7#ボタン123設定 8~ 9 10dir_test = ['Downloads','Documents'] 11x = 1 12dir_path = dir_test[x] 13 14def A(): 15 global x 16 x = 0 17 18def B(): 19 global x 20 x = 1 21 22def Test(): 23 global dir_path 24 directory = Path.home()/dir_path 25 file_type = ('png',) 26 for type in file_type: 27 (Path(directory)/type).mkdir(exist_ok=True) 28 p = Path(directory).glob('*.' + type) 29 for f in p: 30 f.rename(Path(directory)/type/f.name) 31 32button1['command'] = A 33button2['command'] = B 34button3['command'] = Test 35 36root.mainloop() 37

補足情報(FW/ツールのバージョンなど)

Python3.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

dir_pathdir_test[1]で初期化されてしまっているので、それ以降にxを変更しても反映されないためではないでしょうか。

以下のようにdir_test[x]を直接参照して動きますか?

import tkinter from pathlib import Path ~ #ボタン123設定 ~ dir_test = ['Downloads','Documents'] x = 1 def A(): global x x = 0 def B(): global x x = 1 def Test(): global dir_test global x directory = Path.home()/dir_test[x] file_type = ('png',) for type in file_type: (Path(directory)/type).mkdir(exist_ok=True) p = Path(directory).glob('*.' + type) for f in p: f.rename(Path(directory)/type/f.name) button1['command'] = A button2['command'] = B button3['command'] = Test root.mainloop()

投稿2018/08/23 12:56

denzow

総合スコア640

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Suzu9369

2018/08/23 13:02

やってみましたが’’指定されたパスが見つかりません’’となってしまいます...
denzow

2018/08/23 13:05

エラーはどの行で発生するのか追記していただけるともう少し深く言えるかと思います。
Suzu9369

2018/08/23 13:13 編集

dir_test[x]を直接参照すると(Path(directory)/type).mkdir(exist_ok=True)の.mkdirの部分でエラーが出てしまう感じです。 dir_testを使わないでPath.home()/'Downloads'のだと動きます。 'dawnloads'の部分をほかのディレクトリにも代えて使えないかと思い、ボタン一つ一つにdefで定義しようとしたのですがプログラムが長くなってしまうため、defで一つ定義してディレクトリの部分だけボタンで切り替えできないかと思った次第です。
denzow

2018/08/23 13:17

エラー的には`Path.home()/'Documents'`がOS上で存在しないように思われます。`mkdir`では`Path.home()/'Documents'/'png'`を作られようとしているのかと思いますが、`Documents`自体がない場合は同エラーになります。 ただ、年のため、エラーになる直前の作成されようとしているディレクトリを`print`してみて確認したほうがいいかもしれません
Suzu9369

2018/08/23 22:45

おはようございます。 OS上にDocumentsフォルダはあるのです...Path.home()/'Downloads'とPath.home()/'Documents'等、手動で入力しているとちゃんと動く感じです。parents=Trueを試したところC:\Users\ユーザー名\o\pngというような感じでパスができました... 試しにボタンA,Bを押した後にtestbuttonを押したところ、C:\Users\ユーザー名\D\pngとゆうパスができました... 今はボタンに関数を定義して切り替えしようとしているのですが、もっと上手くいくような方法等あったら知恵を借していただけないでしょうか...
denzow

2018/08/23 22:49

とりあえず問題でいうと、コードの一部に誤りがある気がします。 `dir_test[x]`ではなく`dir_path[x]`になっていませんか?`ユーザー名\D\`や`ユーザー名\o\`ということは`Path.home()/dir_test[x]`で指定している`dir_test`が配列ではなく文字列になっている気がします。
Suzu9369

2018/08/24 00:21

ご指摘ありがとうございます。 コードを見直してみたところPath.home()/dir_test[x]の部分がdir_path[x]になっていました... dir_test[x]に変えて動かしてみたところ、ボタンでパスを切り替えることができ、pngフォルダも生成されました!!ありがとうございます!!
Suzu9369

2018/08/24 00:48

無事解決することができました! 初めての投稿で見づらい箇所等あるなか、親身に教えて頂きありがとうございました。
guest

0

directory = Path.home()/dir_path

ってどうなることを期待してますか?

投稿2018/08/23 12:43

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Suzu9369

2018/08/23 12:50

Path.home()/dir_pathのdir_pathの部分にDownloadsやdocumentsが入って、Path.home()/'Downloads'になるのをtkinterで作ったボタンで行いたいのです…
y_waiwai

2018/08/23 12:54

/ というのは割り算演算子というのはわかってるでしょうか。 それをするなら、 directory = Path.home()+ "/"+dir_path とかなんとか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問