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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Tkinter

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

Python

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

Q&A

解決済

2回答

1881閲覧

tkを使用してラインを引きたい

norisu

総合スコア17

Tkinter

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

Python

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

0グッド

0クリップ

投稿2020/03/21 16:35

tkのGUIを使用して図形を描画したいのですが、
獲得した変数をどのように代入すれば良いか悩んでおります。

良い具合に代入する方法をご教示頂ければ幸いです。
よろしくお願いいたします。

python

1import os, tkinter, tkinter.filedialog, tkinter.messagebox 2import sys 3 4def func(): 5 global value 6 print("in the function =",EditBox1.get()) 7 value = EditBox1.get() 8def func2(): 9 global value2 10 print("in the function2 =",EditBox2.get()) 11 value2 = EditBox2.get() 12def func3(): 13 canvas.create_line(value,value2, fill='red') 14 15 16# ウインドウ 17root = tkinter.Tk() 18root.title(u"テストプログラム") 19root.geometry("600x600") 20canvas = tkinter.Canvas(root, width = 400, height = 300) 21canvas.place(x=0, y=200) 22canvas.create_rectangle(0, 0, 200, 200, fill = 'green')#塗りつぶし 23 24# データ数入力 25Static1 = tkinter.Label(text=u'データ数') 26Static1.place(x=5,y=5) 27EditBox1 = tkinter.Entry(width=5) 28EditBox1.place(x=100, y=5) 29 30b = tkinter.Button(text='Exec', command=func) 31b.pack() 32 33Static2 = tkinter.Label(text=u'データ数') 34Static2.place(x=5,y=30) 35EditBox2 = tkinter.Entry(width=5) 36EditBox2.place(x=100, y=30) 37 38c = tkinter.Button(text='Exec', command=func2) 39c.pack() 40 41d = tkinter.Button(text='Exec', command=func3) 42d.pack() 43 44root.mainloop() 45 46print("value=",value) # データが格納されたことを確認 47print("value2=",value2) # データが格納されたことを確認

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

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

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

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

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

guest

回答2

0

こんばんは。

問題文読ませていただきました。

こんな感じでいかがでしょうか?

python

1import tkinter 2import tkinter.filedialog 3import tkinter.messagebox 4 5# 直線(折線)コンテンツを作成する関数 6 7 8def func(): 9 # 前回描画したデータを消去するために保存するための変数 10 global id 11 12 edit1 = EditBox1.get() 13 edit2 = EditBox2.get() 14 15 # 数字が入力されていない場合、初期値として0を格納する。 16 # 参考 : https://note.nkmk.me/python-str-num-determine/ 17 value = edit1 if edit1.isdigit() else 0 18 value2 = edit2 if edit2.isdigit() else 0 19 20 # 前回描画したデータが存在する場合、データ削除を行う。 21 # 参考 : https://www.it-swarm-ja.com/ja/python/tkinter-canvas%E3%82%92%E3%82%AF%E3%83%AA%E3%82%A2%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F/1072525611/ 22 if not id is None: 23 canvas.delete(id) 24 25 # 直線(折線)コンテンツを作成 26 # x1座標 : value, y1座標 : value2, x2座標 : 10, y2座標 : 20, x3座標 : 60, y3座標 : 100, x4座標 : 40, y4座標 : 30 27 # option : fill(線を引くときの色を設定) redとする。 28 # 戻り値 : ID 29 id = canvas.create_line(value, value2, 10, 20, 60, 100, 40, 30, fill='red') 30 31 32# Windowを描画する。 33root = tkinter.Tk() 34 35# Windowのtitleをつける。 36root.title("テストプログラム") 37# Windowの画面サイズを設定する。 38# geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/ 39root.geometry("600x600") 40 41# Windowを親要素として、canvas Widgetを作成する。 42# width : 幅設定 43# height : 高さ設定 44# Canvasについて : https://kuroro.blog/python/ANyM9WLpd0LSXRQAELOj/ 45canvas = tkinter.Canvas(root, width=400, height=300) 46# Windowを親要素として、canvas Widgetをどのように配置するのか? 47# placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/ 48canvas.place(x=0, y=200) 49# create_rectangle : 矩形を描画する。 50# x1座標 : 0, y1座標 : 0, x2座標 : 200, y2座標 : 200 51# option : fill(矩形の背景色を設定) 52# 戻り値 : ID 53canvas.create_rectangle(0, 0, 200, 200, fill='green') 54 55# データ数の入力 56# Windowを親要素として、label Widgetを作成する。 57# text : テキスト情報 58# Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/ 59Static1 = tkinter.Label(root, text='データ数') 60# Windowを親要素として、label Widgetをどのように配置するのか? 61# placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/ 62Static1.place(x=5, y=5) 63 64# Windowを親要素として、entry Widgetを作成する。 65# width : 幅の設定 66# Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/ 67EditBox1 = tkinter.Entry(width=5) 68# Windowを親要素として、entry Widgetをどのように配置するのか? 69# placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/ 70EditBox1.place(x=100, y=5) 71 72# データ数の入力 73# Windowを親要素として、label Widgetを作成する。 74# text : テキスト情報 75# Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/ 76Static2 = tkinter.Label(root, text='データ数') 77# Windowを親要素として、label Widgetをどのように配置するのか? 78# placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/ 79Static2.place(x=5, y=30) 80 81# Windowを親要素として、entry Widgetを作成する。 82# width : 幅の設定 83# Entryについて : https://kuroro.blog/python/PUZp77YFxrXvMCjpZbUg/ 84EditBox2 = tkinter.Entry(root, width=5) 85# Windowを親要素として、entry Widgetをどのように配置するのか? 86# placeについて : https://kuroro.blog/python/JyaHUKyFyxCa0baFfXg0/ 87EditBox2.place(x=100, y=30) 88 89# Windowを親要素として、button Widgetを作成する。 90# text : テキスト情報 91# command : ボタンをクリックした時に実行する関数を設定。funcとする。 92# Buttonについて : https://kuroro.blog/python/oFju6EngDtcYtIiMIDf1/ 93d = tkinter.Button(root, text='Exec', command=func) 94# Windowを親要素として、button Widgetを作成する。 95# packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/ 96d.pack() 97 98# Windowをループさせて、継続的にWindow表示させる。 99# mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/ 100root.mainloop()

ご確認のほど、よろしくお願いいたします。????‍♂️

投稿2021/06/13 10:32

編集2021/06/13 10:33
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

  • func3() について func(), func2() が呼び出された後でないと
    変数 value, value2 が未定義で参照できない状態になってます。=> NameError
  • func(), func2() を呼び出した後に func3() を呼び出すと、
    変数 value, value2 は期待された値が入っていますが、
    線の描画には引数が不足しています。この場合は下記のエラーになります
    TclError wrong # foordinates: expected at least 4, got 2
    create_line の引数は、2つ以上の点のXY座標、最低4つ以上の引数が必要です。

python

1def func3(): 2 v1 = int(EditBox1.get()) 3 v2 = int(EditBox2.get()) 4 # 例) 左上の点(0, 0) から 点(v1, v2) 迄の線を引く 5 canvas.create_line(0, 0, v1, v2, fill='red')

データが2つしかない為、どのように線を引きたいのかわかりませんが、
ラベルに「データ数」とあるので、折れ線グラフのようなものを想定でしょうか?

投稿2020/03/21 20:26

teamikl

総合スコア8760

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

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

norisu

2020/03/21 23:31

上手くできました!! グラフではなくて単純に線を入力データの値から抜き出して引きたかったところです。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問