0
我想將串行值讀入我的Tkinter GUI。無論是文本窗口還是最終到每秒更新一次的文本標籤小部件。我遇到的問題是隊列類。我得到的錯誤是: AttributeError的:「的applcation」對象有沒有屬性「排隊」Python Tkinter:讀取串行值
這裏是我的代碼:
#!/usr/bin/env python
from tkinter import *
from tkinter import messagebox
from time import sleep
import picamera
import os
import serial
import sys
import RPi.GPIO as GPIO
import _thread
import threading
import random
import queue
# Setup GPIO pin(s)
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(18, GPIO.OUT)
GPIO.output(18, False)
#==============================================================
# Declaration of Constants
# none used
#==============================================================
class SerialThread(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue.Queue()
def read_sensor_values(self):
ser = serial.Serial('/dev/ttyUSB0', 9600)
while True:
if ser.inWaiting:
text = ser.readline(s.inWaiting)
self.queue.put(text)
self.pressures_txt.insert(0.0,values)
class Application(Frame):
""" GUI Application for taking photos. """
def __init__(self, master):
super(Application, self).__init__(master)
self.grid()
self.create_widgets()
self.setup_camera()
def create_widgets(self):
Checkbutton(self, text = "Read Pressure Values", variable = self.mode2, command = self.process_serial, bg = 'white').grid(row = 4, column = 0, sticky = W+E+N+S)
# create text field to display pressure values from arduino
self.pressures_txt = Text(self, height = 3, wrap = WORD)
self.pressures_txt.grid(row=9, column = 0, columnspan =3)
def process_serial(self):
#self.text.delete(1.0, END)
while self.queue.qsize():
try:
self.text.insert(END, self.queue.get())
self.pressures_txt.insert(0.0, self.queue.get())
except queue.Empty:
pass
self.after('1000', self.process_serial)
#................. end of method: read_sensor_values ................
#=================================================================
# main
#=================================================================
root = Tk() # Create the GUI root object
root.title("Control V1.0")
app = Application(root) # Create the root application window
root.mainloop()
我已經發布的代碼是整個程序的簡化版本。我刪除了被認爲不相關的部分。我在python3中運行。我懷疑我可能在縮進時出現錯誤,但我不確定。
我使用從以下鏈接的代碼爲我的串行閱讀課:
那麼,你的應用程序對象沒有隊列,就像錯誤說的那樣。應用程序對象應該有一個隊列嗎? –
我想從串行線程插入我的應用程序對象的文本窗口中的值。從瀏覽的角度看,通常情況下,通過一個隊列來實現這一點,但我承認我並不完全瞭解隊列過程或如何從不同的對象訪問應用程序對象內部的隊列。值應該不斷流,所以我認爲我也不需要.inWaiting。任何有關如何閱讀我的應用程序對象中的這些序列值的建議將不勝感激。 –