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

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

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

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

Tkinter

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

Q&A

解決済

1回答

5311閲覧

Python Tkinter Label の更新

KotaAkiba

総合スコア16

Python 3.x

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

Tkinter

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

0グッド

0クリップ

投稿2020/04/26 03:37

PythonのGUI作成ライブラリのTkinterを用いて色を表示・更新するGUIを作成しています。
そんな中、TkinterのLabelを上書きしたいのですが、Labelが現在あるラベルの下に追加されてしまいます。
上書きするにはどうすれば良いでしょうか。

Pyhton

1import tkinter as tk 2import tkinter.font as tkFont 3import colorsys 4from transrate import int_to_hex 5from change_key_num import change_num 6 7# 初期値HSV 8colorH = 240 9colorS = 167 10colorV = 155 11 12#ウィンドウ・キャンバスサイズ 13geometry_x = 1680 14geometry_y = 1050 15canvasSquare = 400 16canvasPlace_x = (geometry_x/2) - (canvasSquare/1.5) 17canvasPlace_y = (geometry_y/2) - (canvasSquare/1.5) 18 19root = tk.Tk() 20fontStyle = tkFont.Font(family='Lucida Grande', size=20) 21 22colorR, colorG, colorB = colorsys.hsv_to_rgb(colorH/360, colorS/255, colorV/255) 23colorRectangle = '#' + int_to_hex(round(colorR*256)) + int_to_hex(round(colorG*256)) + int_to_hex(round(colorB*256)) 24 25buffer = tk.StringVar() 26buffer.set('') 27 28class MyRectangle(tk.Frame): 29 """ 30 MyRectangle: 四角形を作成・編集する 31 """ 32 def __init__(self, master=None): 33 super().__init__(master) 34 self.pack() 35 36 # キャンバスエリア 37 self.canvas = tk.Canvas(root, width=canvasSquare, height=canvasSquare, bd=0, highlightthickness=0) 38 self.canvas.place(x=canvasPlace_x, y=canvasPlace_y) # キャンバスエリアを(0,0)で指定 39 40 # 四角形で塗りつぶし 41 self.canvas.create_rectangle(0, 0, canvasSquare, canvasSquare, fill=colorRectangle, outline=colorRectangle) 42 43 #キー操作 44 def key(event): 45 global colorH, colorS, colorV, colorR, colorG, colorB 46 global colorRectangle 47 48 colorH, colorS, colorV = change_num(event, colorH, colorS, colorV) 49 colorR, colorG, colorB = colorsys.hsv_to_rgb(colorH / 360, colorS / 256, colorV / 256) 50 colorRectangle = '#' + int_to_hex(round(colorR * 256)) + int_to_hex(round(colorG * 256)) + int_to_hex(round(colorB * 256)) 51 52 color_text = u'変更値 H: ' + str(colorH) + u' S: ' + str(colorS) + u' V: ' + str(colorV) 53 HSV = tk.Label(root, text=color_text, foreground='white', background='black', font=fontStyle) 54 HSV.place(x=0, y=0) 55 HSV.pack(anchor='nw') 56 57 # キャンバスエリア 58 canvas = tk.Canvas(root, width=canvasSquare, height=canvasSquare, bd=0, highlightthickness=0) 59 canvas.place(x=canvasPlace_x, y=canvasPlace_y) 60 # キャンバスエリアを(0,0)で指定 61 # 四角形で塗りつぶし 62 canvas.create_rectangle(0, 0, canvasSquare, canvasSquare, fill=colorRectangle, outline=colorRectangle) 63 64 65# 初期値と現在の値を表示する 66color_text = u'初期値 H: ' + str(colorH) + u' S: ' + str(colorS) + u' V: ' + str(colorV) 67HSV = tk.Label(root, text=color_text, foreground='white', background='black', font=fontStyle) 68HSV.place(x=0, y=0) 69HSV.pack(anchor='nw') 70 71color_text=u'変更値 H: ' + str(colorH) + u' S: ' + str(colorS) + u' V: ' + str(colorV) 72HSV = tk.Label(text=color_text, foreground='white', background='black', font=fontStyle) 73HSV.place(x=0, y=0) 74HSV.pack(anchor='nw') 75 76frame = tk.Frame(root, width=0, height=0) 77frame.bind("<Key>", MyRectangle.key) 78frame.focus_set() 79frame.pack() 80 81# ウインドウのタイトルを定義する 82root.title(u'Color Matching') 83 84# ここでウインドウサイズを定義する 85root.geometry(str(geometry_x) + 'x' + str(geometry_y)) 86root.config(bg = 'black') 87 88rec = MyRectangle(master=root) 89rec.mainloop() 90 91with open('test_name.txt', 'w') as f: 92 f.write('colorH: ' + str(colorH) + ' colorS: ' + str(colorS) + ' colorV: ' + str(colorV))
  • 開発環境

macOS Catalina
Python3.7
PyCharm 2018.3.7

初めの状態

操作後

質問下手で申し訳ありません。ご回答が可能でしたらよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

transrate, chang_key_num がない為、動作確認できませんが、
def key(event): 内で毎回新しくラベルを作成しているのが原因です。
既に作成済みの label を更新するには、HSV["text"] にテキストを代入します。

追記:
変更前と変更後の2つのラベルがあるので、
作成時に別々の変数に格納しておく必要があります。

diff

1- HSV = tk.Label(root, text=color_text, foreground='white', background='black', font=fontStyle) 2- HSV.place(x=0, y=0) 3- HSV.pack(anchor='nw') 4+ HSV["text"] = color_text

同様に、canvas もキーが押される度に作成されている為、これも問題です。
(def key() 内) 新規に canvas = tk.Canvas()とはせずに、

  • 以前の rectangleを削除
  • 新規に 以前作成したキャンバスで create_rectangle

投稿2020/04/26 04:15

編集2020/04/26 04:33
teamikl

総合スコア8664

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

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

KotaAkiba

2020/04/26 04:48

ありがとうございます!修正することができました。 また、他の点にもご指摘いただきありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問