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

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回答

2134閲覧

Spinboxの更新

PICCOLO

総合スコア12

Python 3.x

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

Tkinter

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

Python

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

0グッド

1クリップ

投稿2018/10/01 15:16

編集2018/10/02 09:13

前提・実現したいこと

Spinboxの最大値を読み込んだファイルの行数で変化させたいと思っています。読み込んだ行数はLine_noという変数に保存したいと考えています。SpinboxLine_noの値が def any(path)内のLine_noの値に置き換えるにはどうすればいいのでしょうか。

発生している問題・エラーメッセージ

Line_noに読み込んだ行数を保存はできるのですが、Spinboxの最大値が10のままです。

該当のソースコード

python

1anaframe = Frame(root) 2anaframe.grid(row = 0, column=0, sticky='news') 3 4Line_no = 10 5 6def any(path): 7 8 9 #============列が一定でないcsvを読み込む定義============== 10 col_names = [0,1,2,3,4,5,6,7,8,9,10] 11 12 scvfilename = os.path.abspath(file) 13 os.chdir(os.path.abspath(os.path.dirname(os.path.abspath(file)))) 14 df = pd.read_csv(path,header = None, names =col_names , encoding = 'shift-jis', engine='python') 15 16 Line_no = len(df) 17 18 print(Line_no) 19 20section1frameh = Frame(anaframe,pady=10) 21section1frameh.pack() 22 23low = Spinbox(section1frameh,from_ = 1, to = Line_no, increment = 1) 24low.pack(side = 'left') 25 26tilde = Label(section1frameh,text = ' ~ ',font = 8) 27tilde.pack(side = 'left') 28 29high = Spinbox(section1frameh,from_ = 1, to = Line_no, increment = 1) 30high.pack(side = 'left') 31

補足

def any(path)pathはファイルパスになります。

###追記(18/10/02) ※このような追記になってしまい申し訳ございません。
any(path)に関しましては別関数でファイル参照ダイアログからcsvファイルを参照してany(path)を呼び出しています。

python

1def reference_callback(): 2 3 4 tkinter.messagebox.showinfo('注意','CSVファイルを参照してください。') 5 global file 6 7 file = tkinter.filedialog.askopenfilename(filetypes = fTyp,initialdir = iDir) 8 if file != "" : 9 tkinter.messagebox.showinfo('インフォメーション',file) 10 print("%r"%(os.path.basename(file))) 11 print("パス%r"%file) 12 print("絶対パス%r"%(os.path.abspath(file))) 13 any(file) 14 print(Line_no_back) 15 print(dirname) 16 17 if os.path.exists(CH_settingPATH): 18 19 ifCH = tkinter.messagebox.askyesno('確認','設定の変更をしますか') 20 if ifCH == True: 21 CH_setting() 22 23 else: 24 tkinter.messagebox.showinfo('確認','設定をしてください。') 25 CH_setting() 26 else : 27 tkinter.messagebox.showinfo('エラー','選択できていません。') 28 del file 29 30

このコードの下に上記のdef any(path)が来る形になっています。申し訳ございません

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

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

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

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

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

guest

回答2

0

ベストアンサー

変数のスコープが違うので
同じ変数名でも関数内と関数外では別物です。

Line_no = 10なので外側で出力しても10のままです。

Line_no = 10 def any(): Line_no = 20 print('こういう',Line_no) any() print('ことです',Line_no)

出力結果

こういう 20 ことです 10

投稿2018/10/02 09:37

opyon

総合スコア1009

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

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

0

質問のコードでは関数any(path)をどこからも呼び出していないのでLine_no = 10のままです。

関数any(path)を呼び出し、戻り値を受け取るようにすれば良いかと思います。

def any(path): #中略 #Line_no = len(df) #削除 return len(df) #追加
Line_no = any(path) section1frameh = Frame(anaframe,pady=10) #以下略

説明だけだと分かりづらいかもしれないので全体

anaframe = Frame(root) anaframe.grid(row = 0, column=0, sticky='news') Line_no = 10 def any(path): #============列が一定でないcsvを読み込む定義============== col_names = [0,1,2,3,4,5,6,7,8,9,10] scvfilename = os.path.abspath(file) os.chdir(os.path.abspath(os.path.dirname(os.path.abspath(file)))) df = pd.read_csv(path,header = None, names =col_names , encoding = 'shift-jis', engine='python') # 修正ここから # 不要なので削除 # Line_no = len(df) # print(Line_no) return len(df) #追加 path = 'ファイルパス' #追加 Line_no = any(path) #追加 # 修正ここまで section1frameh = Frame(anaframe,pady=10) section1frameh.pack() low = Spinbox(section1frameh,from_ = 1, to = Line_no, increment = 1) low.pack(side = 'left') tilde = Label(section1frameh,text = ' ~ ',font = 8) tilde.pack(side = 'left') high = Spinbox(section1frameh,from_ = 1, to = Line_no, increment = 1) high.pack(side = 'left')

投稿2018/10/01 17:57

opyon

総合スコア1009

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

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

PICCOLO

2018/10/02 09:17

すみません。def any(path)は別関数 def reference_callback(): で呼び出しています。質問内容に追記という形になりますが、もう一度ご教示お願いいたします。誠に申し訳ございません。
opyon

2018/10/02 09:34

分かりにくいようなので別回答します。
opyon

2018/10/02 09:40

どこにもLine_no = 10を変更してる箇所が無いということです。 Line_no = ←どこかで何かしらの処理か関数の戻り値などで代入してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問