首页 > 解决方案 > 想要在两个不同的 tkinter 标签中显示两个字符串值

问题描述

我使用 tkinter GUI 编写了用于在两个不同标签中显示两个串行读取字符串的代码。我的代码正在运行并且窗口也弹出但没有显示值。帮助我解决这个问题。这是我的代码


import serial
import tkinter 
from tkinter import *
import time
class SerialViewer(Tk):
 def _init_(self):
      self.win = Tk()
      self.ser=serial.Serial('/dev/ttyS0',9600)
 def makewindow (self):
      frame1 =Frame(self.win)
      frame1.pack()
      self.v=StringVar()
      self.v.set=('default')
      label=Label(frame1,textvariable=self.v,relief=RAISED)
      label.pack(side=LEFT)
      frame2 = Frame(self.win)
      frame2.pack()
      self.d=StringVar()
      self.d.set=('default')
      label=Label(frame2,textvariable=self.d,relief=RAISED)
      label.pack(side=RIGHT)
 def update(self):
       print(self.ser.write("*01T%"))
       data=self.ser.readline(self.ser.inWaiting())
       self.v.set(data)
       time.sleep(2)
       print(self.ser.write('*00T%'))
       data1=self.ser.readline(self.ser.inWaiting())
       self.d.set(data1)
       self.win.after(100,self.update)
 def run (self):
       self.makewindow()
       self.update()
       self.win.mainloop()
app=SerialViewer()
app.mainloop()

标签: pythontkinterserial-portraspberry-pi3

解决方案


正如评论中所说,方法 _init_ 需要更改为 __init__ 并且递归错误即将到来,因为未调用父类的 __init__ 方法。请添加如下调用:

class SerialViewer(Tk):
    def _init_(self):
        super(SerialViewer, self).__init__() # Call the initializer method of parent class
        self.win = Tk()
        self.ser=serial.Serial('/dev/ttyS0',9600)

希望这可以帮助!!


推荐阅读