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

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

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

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

Python

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

Q&A

解決済

1回答

1157閲覧

Python tkinter ラベルの削除&再表示がチカチカする件について

awgfawg

総合スコア4

Tkinter

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

Python

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

0グッド

0クリップ

投稿2022/03/04 19:12

編集2022/03/04 19:12

ラベルのテキストが0.1秒おきに動的に変化するGUIを作っています。動作を軽くするため過去のラベルを削除するようにしました。しかし、実行するとチカチカしてしまいます。ちょうど下のプログラムを実行したような状態です。

チカチカさせずにラベルの削除と表示を行う方法はありませんか?
(そもそも、0.1秒おきに更新させるのが誤りなのでしょうか?)

import tkinter as tk import tkinter.ttk as ttk import time def test(): BaseFrame2 = tk.Frame( root, width = 380, height = 280, pady=100, bg="red" ) BaseFrame2.place( x = 110, y = 115 ) label2 = tk.Label(BaseFrame2, text='This is Label.',bg="red") label2.pack() label2.update() object.ob.append(label2) def RegularCheck(): for label in object.ob: if label.winfo_ismapped(): label.pack_forget() object.ob = [] test() root.after(100,RegularCheck) if __name__ == '__main__': class Objects: ob = [] object = Objects() root = tk.Tk() root.title("Frame") root.geometry("600x600") BaseFrame = tk.Canvas( root, width = 400, height = 300, bg = "red" ) BaseFrame.place( x = 100, y = 100 ) RegularCheck() root.mainloop()

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

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

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

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

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

guest

回答1

0

ベストアンサー

StringVar を使って Labelを使いまわすといいですよ。

py

1import tkinter as tk 2 3 4class App: 5 6 def __init__(self, root): 7 self.root = root 8 canvas = tk.Canvas(root, width=400, height=300, bg="red") 9 canvas.place(x=100, y=100) 10 11 frame = tk.Frame(root, width=380, height=280, pady=100, bg="red") 12 frame.place(x=110, y=115) 13 14 self.message = tk.StringVar() 15 self.message.set('This is Label.') 16 label = tk.Label(frame, textvariable=self.message, bg="red") 17 label.pack() 18 19 self.count = 0 20 21 def update(self): 22 self.count += 1 23 self.message.set(self.count) 24 self.root.after(100, self.update) 25 26 27def main(): 28 root = tk.Tk() 29 root.title("Frame") 30 root.geometry("600x600") 31 32 app = App(root) 33 root.after(1000, app.update) 34 35 root.mainloop() 36 37 38if __name__ == '__main__': 39 main()

色を変えてみました。色名で指定することもできます。

py

1import tkinter as tk 2 3 4class App: 5 6 def __init__(self, root): 7 self.root = root 8 canvas = tk.Canvas(root, width=400, height=300, bg="red") 9 canvas.place(x=100, y=100) 10 11 frame = tk.Frame(root, width=380, height=280, pady=100, bg="red") 12 frame.place(x=110, y=115) 13 14 self.message = tk.StringVar() 15 self.message.set('This is Label.') 16 self.label = tk.Label(frame, textvariable=self.message, bg="red") 17 self.label.pack() 18 19 self.count = 0 20 21 def update(self): 22 self.count += 1 23 self.message.set(self.count) 24 self.root.after(100, self.update) 25 self.label['bg'] = f'#{self.count % 256:02x}ffff' 26 27 28def main(): 29 root = tk.Tk() 30 root.title("Frame") 31 root.geometry("600x600") 32 33 app = App(root) 34 root.after(1000, app.update) 35 36 root.mainloop() 37 38 39if __name__ == '__main__': 40 main()

投稿2022/03/05 04:30

編集2022/03/11 19:43
shiracamus

総合スコア5406

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

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

awgfawg

2022/03/08 01:38 編集

回答ありがとうございます。返信遅れてごめんなさいコード参考にさせていただきます 1つ質問なのですが、 self.root = root  これは何をやっているのでしょうか?
shiracamus

2022/03/08 03:22 編集

updateメソッドの中で root を使う必要があるので、インスタンス(self)の中に root を記憶しています。 インスタンスに代入しておかないとグローバル変数を探すことになりますが、root変数はmain関数の中のローカル変数にしたため、グローバル変数rootがありません。
awgfawg

2022/03/10 06:50

ありがとうざざいました。
shiracamus

2022/03/11 19:44

色変更するコードを追記しました。 「tkinter label 色 変更」でネット検索して調べました。
awgfawg

2022/03/12 00:23

関係ない質問してごめんなさい。ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問