1分後のラベル画像とシリアルタイムアウトに関するTkinterリフレッシュの問題

マザール

arduinoからシリアルデータ配列を取得し、それらをRaspberry Pi 3のPython3でラベルの座標として使用しようとしています。シリアルで配列を取得し、必要に応じてラベルを配置できます。プログラムは動作します。しかし、最初の問題は、ちらつきが見られ、ちらつきの遅延時間が時間とともに最悪になっていることです。2番目の問題は、プログラムが数分後に動作を停止することです。

ser.flushInput()を試しましたが、どこでも配列をクリアしましたが、結果は同じです。

from tkinter import *
import serial
root = Tk()
root.geometry("1024x600")
ser = serial.Serial('/dev/ttyAMA0',115200)
ser.timeout=None

data=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
data1=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
image=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
label=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
x1=[210,210,210,370,370,370,530,530,530,690,690,690,850,850,850,850]
y1=[440,325,75,440,325,75,440,325,75,440,325,75,440,325,200,75]

image_gri=PhotoImage(file="/home/pi/python/gri.gif")
image_kirmizi = PhotoImage(file="/home/pi/python/kirmizi.gif")
image_yesil = PhotoImage(file="/home/pi/python/yesil.gif")

def kontrol():
 data=[]
 ser.flush()
 ser.flushInput()
 data = ser.read(32)
 #print(data)

 for i in range(0,16):
      if data[i]==49 and data[i+16]==49:

            image[i]=image_yesil
            label[i] = Label(root, image=image[i])
            label[i].place(x=x1[i],y=y1[i])


      elif data[i]==49 and data[i+16]==48:
            image[i]=image_kirmizi
            label[i] = Label(root, image=image[i])
            label[i].place(x=x1[i],y=y1[i])

      else :
            image[i]=image_gri
            label[i] = Label(root, image=image[i])
            label[i].place(x=x1[i],y=y1[i])


 ser.flush()
 ser.flushInput()               
 root.after(50,kontrol)
 root.update()
kontrol()
#root.after(50,kontrol)
mainloop()

プログラムが最大12時間動作し、動作中にちらつきが見られないようにしたい。

wovano

問題は、実行ごとに16個のラベルウィジェットを追加していることです。これらのウィジェットはメモリに保持され、毎回処理されます。古いラベルが削除されることはありません。

これを解決するには、を使用して、新しいラベルを作成するときに前のラベルを削除できますlabel[i].destroy()さらに良いのは、を使用して新しいラベルを作成するのではなく、既存のラベルを更新することlabel[i].config(image=...)です。

以下は完全に機能する例です(一部のコードがコメントアウトされ、代わりにランダムデータとダミーイメージが使用されているため、Python 3を使用している人は誰でも外部依存関係なしでこれを実行できます):

import random
from tkinter import *
# import serial

root = Tk()
root.geometry("1024x600")
# ser = serial.Serial('/dev/ttyAMA0', 115200)
# ser.timeout = None

# If you have the images, use this:
#IMAGE_GRI = PhotoImage(file="/home/pi/python/gri.gif")
#IMAGE_KIRMIZI = PhotoImage(file="/home/pi/python/kirmizi.gif")
#IMAGE_YESIL = PhotoImage(file="/home/pi/python/yesil.gif")

# Otherwise, create some dummy images for demonstration purposes:
WIDTH = 64
HEIGHT = 64
DATA = ','.join(['0x00' for i in range(WIDTH * HEIGHT // 8)])
BITMAP = '#define im_width %d\n#define im_height %d\nstatic char im_bits[] = {\n%s\n};' % (WIDTH, HEIGHT, DATA)
IMAGE_GRI = BitmapImage(data=BITMAP, background="grey")
IMAGE_KIRMIZI = BitmapImage(data=BITMAP, background="red")
IMAGE_YESIL = BitmapImage(data=BITMAP, background="green")

# Initialize with grey images (you may choose a different image, of course)
label = [Label(root, image=IMAGE_GRI) for i in range(16)]

x1 = [210, 210, 210, 370, 370, 370, 530, 530, 530, 690, 690, 690, 850, 850, 850, 850]
y1 = [440, 325, 75, 440, 325, 75, 440, 325, 75, 440, 325, 75, 440, 325, 200, 75]

# Place the images only once:
for i in range(16):
    label[i].place(x=x1[i], y=y1[i])

def kontrol():
    data = []
    # ser.flush()
    # ser.flushInput()
    # data = ser.read(32)
    # Create random data for demonstration purposes:
    data = [random.choice((48, 49)) for i in range(32)]
    #print(data)

    for i in range(16):
        if data[i] == 49 and data[i+16] == 49:
            label[i].config(image=IMAGE_YESIL)  # update image!
        elif data[i] == 49 and data[i+16] == 48:
            label[i].config(image=IMAGE_KIRMIZI)  # update image!
        else:
            label[i].config(image=IMAGE_GRI)  # update image!

    # ser.flush()
    # ser.flushInput()
    root.after(50, kontrol)
    # root.update()  # Not necessary! Use root.update_idletasks() if necessary.

kontrol()
mainloop()

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Android リアルタイム グラフ アプリがクラッシュする。考えられるマルチスレッドの問題

分類Dev

jQuery変更イベント、jQueryでのフォームのシリアル化に関する問題

分類Dev

newtonsoft jsonの逆シリアル化に関する問題(クラッシュ)

分類Dev

Javaのレーベンシュタインアルゴリズムの問題

分類Dev

アイテムを関数パラメーターからベクトルに関数パラメーターからプッシュする方法-異なるライフタイムの問題

分類Dev

リスト型とブール型のアクションパラメータに関するWebAPIMapHttpRouteの問題

分類Dev

ポッドファイルとアプリ拡張機能をGithubにプッシュする際の問題

分類Dev

スクロール可能なビューアプリのクラッシュに関するTitaniumAndroidの問題

分類Dev

トライアスロンレースでチームの最高のフィニッシュタイムを達成するためのアルゴリズム

分類Dev

デュアル モニターのセットアップの問題、マイクを使用するアプリケーション (例: Discord) を使用すると、2 番目のモニターが常に 1 ~ 2 秒黒くなることがある

分類Dev

アプリケーション固有のアイテム(API、データベースモデルなど)とプラットフォーム固有のアイテムを分離することは良い考えですか

分類Dev

リストビューとカスタムアダプタのスクロールに関する問題

分類Dev

observableArray内の選択されたリストアイテムを他のobservableArrayにプッシュする問題?フィドル提供

分類Dev

NodeJSアプリケーションでのファイルのインポートに関する問題 `

分類Dev

ProtoBufフィールドのコレクションに関するKryoシリアル化の問題

分類Dev

モバイルメニューとアニメーションコンテンツに関するトリッキーなz-indexの問題

分類Dev

メインリサイクラービューをcontent_mainからresファイルの別のレイアウトに移動した後にアプリがクラッシュする

分類Dev

ソーシャルシェアリングのデフォルトのウェブサイト画像-問題

分類Dev

「カスタム」シングルページアプリケーションのスタイル付きコンポーネントに関する問題

分類Dev

プッシュ通知のフィルタリングクライアント側プッシュウーシュ

分類Dev

ガベージコレクター(.net / java)はリアルタイムシステムの問題ですか?

分類Dev

フラッシュフィルに関するVlookupの問題

分類Dev

レルムデータベースに変更を加えるとアプリがクラッシュする

分類Dev

プライベートリストを使用したカスタムコレクションのシリアル化の問題

分類Dev

Ionic / Angularハイブリッドアプリ、シェイクイベントの動作に関する問題

分類Dev

選択ボックスとURLハッシュでフィルタリングするときにjQueryアイソトープが問題になる

分類Dev

特定のハッシュタグのツイート数をリアルタイムでカウントする

分類Dev

カーネル4.10およびプライムセレクトクラッシュに関するIntelグラフィックカードの問題

分類Dev

herokuと帆のアプリ| クラッシュとタイムアウト

Related 関連記事

  1. 1

    Android リアルタイム グラフ アプリがクラッシュする。考えられるマルチスレッドの問題

  2. 2

    jQuery変更イベント、jQueryでのフォームのシリアル化に関する問題

  3. 3

    newtonsoft jsonの逆シリアル化に関する問題(クラッシュ)

  4. 4

    Javaのレーベンシュタインアルゴリズムの問題

  5. 5

    アイテムを関数パラメーターからベクトルに関数パラメーターからプッシュする方法-異なるライフタイムの問題

  6. 6

    リスト型とブール型のアクションパラメータに関するWebAPIMapHttpRouteの問題

  7. 7

    ポッドファイルとアプリ拡張機能をGithubにプッシュする際の問題

  8. 8

    スクロール可能なビューアプリのクラッシュに関するTitaniumAndroidの問題

  9. 9

    トライアスロンレースでチームの最高のフィニッシュタイムを達成するためのアルゴリズム

  10. 10

    デュアル モニターのセットアップの問題、マイクを使用するアプリケーション (例: Discord) を使用すると、2 番目のモニターが常に 1 ~ 2 秒黒くなることがある

  11. 11

    アプリケーション固有のアイテム(API、データベースモデルなど)とプラットフォーム固有のアイテムを分離することは良い考えですか

  12. 12

    リストビューとカスタムアダプタのスクロールに関する問題

  13. 13

    observableArray内の選択されたリストアイテムを他のobservableArrayにプッシュする問題?フィドル提供

  14. 14

    NodeJSアプリケーションでのファイルのインポートに関する問題 `

  15. 15

    ProtoBufフィールドのコレクションに関するKryoシリアル化の問題

  16. 16

    モバイルメニューとアニメーションコンテンツに関するトリッキーなz-indexの問題

  17. 17

    メインリサイクラービューをcontent_mainからresファイルの別のレイアウトに移動した後にアプリがクラッシュする

  18. 18

    ソーシャルシェアリングのデフォルトのウェブサイト画像-問題

  19. 19

    「カスタム」シングルページアプリケーションのスタイル付きコンポーネントに関する問題

  20. 20

    プッシュ通知のフィルタリングクライアント側プッシュウーシュ

  21. 21

    ガベージコレクター(.net / java)はリアルタイムシステムの問題ですか?

  22. 22

    フラッシュフィルに関するVlookupの問題

  23. 23

    レルムデータベースに変更を加えるとアプリがクラッシュする

  24. 24

    プライベートリストを使用したカスタムコレクションのシリアル化の問題

  25. 25

    Ionic / Angularハイブリッドアプリ、シェイクイベントの動作に関する問題

  26. 26

    選択ボックスとURLハッシュでフィルタリングするときにjQueryアイソトープが問題になる

  27. 27

    特定のハッシュタグのツイート数をリアルタイムでカウントする

  28. 28

    カーネル4.10およびプライムセレクトクラッシュに関するIntelグラフィックカードの問題

  29. 29

    herokuと帆のアプリ| クラッシュとタイムアウト

ホットタグ

アーカイブ